react
React18源码

这里是学习React18 的记录

react 理解

理解react,react-reconciler,react-dom,shared 之间的关系

  1. react 包含 jsx 方法,将原始的html结构解析为ReactElement,如:以下结构:
  <div><span>big-react</span></div>

会被解析为:

{
  "type": "div",
  "key": null,
  "ref": null,
  "props": {
    "children": {
      "type": "span",
      "key": null,
      "ref": null,
      "props": {
        "children": "big-react"
      },
      "__mark": "Dora Li"
    }
  },
  "__mark": "Dora Li"
}
  1. react-reconciler是react的主要执行逻辑的地方,是react和react-dom的桥梁,也是将ReactElement 转为 fiber结构,创建dom元素,控制更新的地方。以上ReactElement会在react-reconciler被转为: 红色框即为fiber结构,绿色框即为fiber对应的dom节点

  2. react-dom 就是创建node节点,以及把node节点放在dom中,当前这些可能不仅仅是在浏览器环境,其他宿主环境也可以实现

  3. shared 其实就是定义一下公共的 type,共所有的包都可以使用

理解workLoop做了什么?

workLoop 其实就是根据 react 的jsx方法解析出来的jsx ReactElement 结构数据进行递归 递归中的递就是 beginWork 主要是在根据 ReactElement 来创建 fiber结构,来树形记录节点关系 递归中的归就是 completeWork 主要作用就是根据 fiber 的节点关系来创建DOM结构的节点关系

react中的一些难以理解的技术点

位运算

const A = 1 << 0; // 0b00000001
const B = 1 << 1; // 0b00000010
const C = 1 << 2; // 0b00000100
 
// 增加属性
const ABC = A | B | C; // 0b00000111
 
// 删除属性
const AB = ABC & ~C; // 0b00000011
 
// 属性比较
// 1. AB当中包含B
console.log(AB & (B === B)); // true
// 2. AB当中不包含C
console.log(AB & (C === 0)); // true
// 3. A和B相等
console.log(A === B); // true