你写的 .jsx 文件 → React 会按这个流水线处理:
React.createElement()(babel 做的)Virtual DOM(虚拟 DOM 对象)Reconciler(协调器)转成 Fiber 树function App() {
return (
<div id="root">
<h1>Hello</h1>
<p>React</p>
</div>
);
}
function App() {
return React.createElement(
"div",
{ id: "root" },
React.createElement("h1", null, "Hello"),
React.createElement("p", null, "React"),
);
}
React.createElement(type, props, ...children)它返回一个JS 对象,就是 Virtual DOM(虚拟 DOM)
结构长这样:
{
type: 'div',
props: {
id: 'root',
children: [
{ type: 'h1', props: { children: 'Hello' } },
{ type: 'p', props: { children: 'React' } }
]
}
}
特点:
Fiber 是:
它的作用:
它比 VDOM 多了链表结构,用来实现:
{
// 节点类型
type: 'div',
key: null,
// 指向树结构 ★核心
return: 父Fiber,
child: 第一个子Fiber,
sibling: 下一个兄弟Fiber,
// 状态与副作用
memoizedState: hooks链表,
memoizedProps: {},
effectTag: 插入/更新/删除,
// 其他...
}
你写的 JSX:
<div>
<h1></h1>
<p></p>
</div>
div (return: null)
↓ child
h1 (return: div, sibling: p)
↓ sibling
p (return: div)
这种结构最大优势:
这就是 React “异步渲染”的基础。
React 有两棵 Fiber 树:
这就是 React 的 Reconciliation(协调/差分) 过程。
React.createElementcreateElement → 返回 虚拟 DOM 对象child(子)sibling(兄弟)return(父)memoizedState(Hooks 链表)React.createElementmemoizedState 就是 Hooks 的存储位置