react实现机制
React 核心实现机制
React 的实现机制基于虚拟 DOM、组件化、单向数据流和 Fiber 架构等核心概念。以下从关键层面解析其工作原理:
虚拟 DOM 与 Diff 算法
虚拟 DOM 是真实 DOM 的轻量级 JavaScript 对象表示。当组件状态变化时,React 会重新渲染虚拟 DOM 树,通过 Diff 算法比较新旧虚拟 DOM 树的差异。
Diff 算法采用分层比较策略,仅对比同层节点。对于列表元素,使用 key 属性优化复用逻辑。最终将计算出的差异(称为“变更集”)批量更新到真实 DOM。
// 虚拟 DOM 结构示例
const vdom = {
type: 'div',
props: { className: 'container' },
children: [
{ type: 'h1', props: { children: 'Hello' } },
{ type: 'p', props: { children: 'World' } }
]
}
Fiber 架构
React 16 引入 Fiber 架构,将渲染过程拆分为可中断的异步任务单元。每个 Fiber 节点对应一个组件实例,包含以下信息:
- 组件类型(函数/类组件)
- 当前 props 和 state
- 指向父、子、兄弟节点的引用
- 副作用标记(如是否需要 DOM 更新)
Fiber 通过 requestIdleCallback 或 MessageChannel 实现时间切片(Time Slicing),优先处理高优先级更新(如用户输入)。
组件渲染流程
函数组件通过执行函数返回虚拟 DOM,类组件通过调用 render 方法。React 在渲染阶段会:
- 创建 Fiber 树并协调子节点
- 标记需要更新的节点(副作用)
- 提交阶段将变更应用到 DOM
Hooks 如 useState 通过 Fiber 节点的 memoizedState 链表存储状态,确保在函数组件中也能维护状态。
事件系统
React 实现合成事件(SyntheticEvent),将所有事件委托到文档根节点。事件处理流程:
- 标准化浏览器事件对象
- 通过事件池复用事件对象
- 自动处理
this绑定
<button onClick={(e) => console.log(e.nativeEvent)}>
Click
</button>
性能优化策略
React 提供多种优化手段:
React.memo缓存组件输出useMemo/useCallback避免不必要的计算- 并发模式(Concurrent Mode)允许中断渲染
- 服务端渲染(SSR)与 hydration 机制
状态管理原理
状态更新通过 setState 或 useState 触发,React 会:
- 将更新加入任务队列
- 调度重新渲染
- 合并多次更新(批处理)
- 最终计算最新状态并更新 UI
类组件的 setState 是异步的,函数组件的状态更新函数会触发重新渲染但不会合并。







