IT评测·应用市场-qidao123.com技术社区

标题: React中createRoot函数原明白读——Element对象与Fiber对象、FiberRootNode [打印本页]

作者: 盛世宏图    时间: 2025-1-14 00:14
标题: React中createRoot函数原明白读——Element对象与Fiber对象、FiberRootNode
【2024最新版】React18 核心源码分析教程(全61集)

Element对象与Fiber对象


在 React 中,Element 对象Fiber 对象 是核心概念,用于实现 React 的高效渲染和更新机制。以下是它们的具体解读:
1. Element 对象

界说

React 的 Element 对象 是通过 React.createElement 或 JSX 创建的**形貌 UI 的普通 JavaScript 对象**。
结构

一个典型的 React Element 对象的结构如下:
  1. const element = {
  2.   type: 'div', // 或者是组件函数/类,表示元素类型
  3.   props: {
  4.     children: [/* 子元素 */],
  5.     className: 'example',
  6.   },
  7.   key: null, // 用于唯一标识(diff 算法优化)
  8.   ref: null, // 用于获取组件实例或 DOM
  9.   $$typeof: Symbol(react.element), // 用于区分是否是 React 元素
  10. };
复制代码

特点


2. Fiber 对象

界说

Fiber 对象 是 React 16+ 引入的内部数据结构,用于管理组件的更新和渲染工作。
结构

一个 Fiber 对象的基本结构如下:
  1. const fiber = {
  2.   tag: 5, // 表示 Fiber 类型,比如函数组件、类组件、HostComponent(如 div)
  3.   type: 'div', // 与 Element 的 type 对应
  4.   key: null, // 用于唯一标识
  5.   stateNode: DOM节点或类组件实例, // 当前 Fiber 的实际实例,DOM 节点或类组件实例
  6.   child: Fiber, // 第一个子节点
  7.   sibling: Fiber, // 下一个兄弟节点
  8.   return: Fiber, // 父节点
  9.   pendingProps: {}, // 本次更新的新 props
  10.   memoizedProps: {}, // 上一次渲染的 props
  11.   memoizedState: {}, // 上一次渲染的 state
  12.   effectTag: 0, // 副作用标志,表示需要执行的操作类型
  13.   nextEffect: null, // 下一个有副作用需要处理的 Fiber
  14.   updateQueue: {}, // 存放 state 更新队列
  15. };
复制代码
特点

3. Element 和 Fiber 的关系

特性Element 对象Fiber 对象职责形貌 UI管理组件状态、更新使命和渲染天生由 React.createElement 创建由 React 调治和渲染过程天生结构轻量、不可变的 JS 对象复杂、包罗状态和关系的动态对象生命周期创建后一直存在,形貌 UI 快照每次渲染会重新天生或复用关系是 Fiber 的静态输入是 Element 的动态实现
4. Fiber 的核心功能


5. 总结


Fiber 的引入是 React 性能优化的关键,尤其是在构建复杂的 UI 和实现时间切片时。Element 和 Fiber 分工明确,共同构建了 React 的高效渲染机制。
FiberRootNode与HostRootFiber


在 React 的内部实现中,HostRootFiber 和 FiberRootNode 是 React 核心中的两个紧张概念,分别与 Fiber 树的根节点和渲染树的管理密切相干。以下是对这两个概念的具体剖析。
1. FiberRootNode

界说


作用

结构

FiberRootNode 的典型结构如下:
  1. const fiberRootNode = {
  2.   containerInfo: DOMContainer, // 宿主环境的根容器,如 DOM 节点
  3.   current: HostRootFiber, // 当前的根 Fiber
  4.   finishedWork: null, // 已完成的 Fiber 树
  5.   pendingLanes: 0, // 表示待处理更新的优先级队列
  6.   eventTimes: [], // 记录事件触发时间,用于调度优化
  7.   callbackNode: null, // 当前调度的回调函数
  8.   callbackPriority: NoPriority, // 当前调度的优先级
  9. };
复制代码
2. HostRootFiber

界说


作用

结构

HostRootFiber 是一个特殊的 Fiber 节点,具有以下字段:
  1. const hostRootFiber = {
  2.   tag: HostRoot, // Fiber 类型标记,表示是 HostRoot
  3.   stateNode: FiberRootNode, // 指向 FiberRootNode 实例
  4.   child: Fiber, // 子节点,指向应用的第一个组件(如 <App />)
  5.   pendingProps: {}, // 本次更新传入的 props
  6.   memoizedProps: {}, // 已保存的 props
  7.   memoizedState: {}, // 当前组件状态
  8.   updateQueue: {}, // 存储更新任务的队列
  9.   alternate: WorkInProgressFiber, // 指向 workInProgress Fiber,用于双缓存机制
  10. };
复制代码

3.FiberRootNode 与 HostRootFiber 的关系

特性HostRootFiberFiberRootNode界说Fiber 树的根节点,代表 React 树的逻辑入口React 根容器,管理 Fiber 树与宿主情况存储内容应用的根组件和状态(App 的入口)宿主情况信息(如 DOM 容器)和调治状态连接关系通过 stateNode 引用 FiberRootNode通过 current 引用 HostRootFiber用途形貌 Fiber 树的根管理整个应用的渲染和更新机制生命周期每次更新会创建新的 workInProgress 副本始终存在,贯穿应用生命周期
4. 运行机制中的作用

5. 总结


它们的协作是 React 内部运行机制的核心,支持了高效的渲染与更新流程。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com技术社区 (https://dis.qidao123.com/) Powered by Discuz! X3.4