jsx
JSX 元素节点会被编译成 React Element 形式,使用React.creatElement方法。
createElement
参数:
- 第一个参数:如果是组件类型,会传入组件对应的类或函数;如果是 dom 元素类型,传入 div 或者 span 之类的字符串。
- 第二个参数:一个对象,在 dom 类型中为标签属性,在组件类型中为 props 。
- 其他参数:依次为 children,根据顺序排列。
举个例子:
1 | <div> |
上面的代码会被 babel 先编译成:
1 | React.createElement("div", null, |
fiber
最终,在调和阶段,使用react reconciler(调和器),上述 React element 对象的每一个子节点都会形成一个与之对应的 fiber 对象,然后通过 sibling、return、child 将每一个 fiber 对象联系起来。
fiber tag 标识不用种类的fiber对象。
fiber 对应关系
- child: 一个由父级 fiber 指向子级 fiber 的指针。
- return:一个子级 fiber 指向父级 fiber 的指针。
- sibiling: 一个 fiber 指向下一个兄弟 fiber 的指针。
总结
JSX — babel编译 —> ReactElement — reconciler —> fiber