React源码解析-第三部分:协调与提交

图 6:reconcileChildren 子节点比对细节(单节点与多节点)

📝 解析 :

reconcileChildren 是整个协调阶段最核心的函数。对于单节点 ,比较 type 和 key 决定复用还是替换。对于多节点(数组) ,是否使用 key 导致算法分叉:有 key 时采用三阶段优化算法 (移动、新增、删除),时间复杂度 O(n);无 key 时则退化到按索引遍历,容易因顺序错乱导致大量子组件重新挂载。

图 7:提交阶段(Commit Phase)的三个子阶段

📝 解析 :

提交阶段被拆分为三个严格的同步子阶段,不可中断:

  1. Before Mutation:在 DOM 变更前读取状态(如滚动位置),此阶段可安全访问旧的 DOM。

  2. Mutation :执行所有 DOM 操作(增删改),并将 ref 更新为指向新 DOM。

  3. Layout :立即执行 useLayoutEffect 和类组件的 componentDidMount/Update。

    这三个阶段保证了副作用执行的确定性,且 useLayoutEffect 的同步阻塞特性使其适用于读取布局尺寸。

图 8:类组件生命周期 & 函数组件 Hooks 的执行时序

📝 解析 :

这张图厘清了类组件与函数组件的时序等价关系 。

关键区别 :useEffect 的回调在浏览器绘制之后异步执行 (不阻塞屏幕更新),而 useLayoutEffect 与类组件的 componentDidMount 在绘制前同步执行 。getSnapshotBeforeUpdate 返回的值会作为 componentDidUpdate 的第三个参数,常用于记录滚动位置。

相关推荐
IMPYLH3 分钟前
HTML 的 <tfoot> 元素
前端·javascript·html
像风一样自由20208 分钟前
42.VueReactNextjs如何为AI应用设计前端交互
前端·人工智能·大模型·交互·rag·智能体
鬼手点金8 分钟前
Claude Code示范案例-修复 Bug 工作流
java·服务器·前端·javascript·bug·openclaw
柳杉18 分钟前
用 GPT-6 Astra 和 Tripo3D 做智慧农业 3D 大屏:从调研到可巡检园区全流程实录
前端·ai编程·数据可视化
特创数字科技23 分钟前
【uni-app x】告别系统相机限制!三端通用自定义相机组件:任意布局、静默拍照、录像、水印叠加、连拍回图一次搞定
前端·数码相机·uni-app
IT_陈寒38 分钟前
用Vue时这个响应式陷阱坑了我一整天
前端·人工智能·后端
风骏时光牛马1 小时前
企业客户信息管理数据库
前端
paopaokaka_luck1 小时前
个人综合管理小程序(echarts数据看板、健康数据记录与趋势查看、目标拆解和进度管理、日程待办与番茄钟、习惯打卡、收支统计、个人生活记录、跨模块智能提醒)
前端·javascript·spring·小程序·数据分析·echarts·生活
霸道流氓气质1 小时前
Graph Studio Web IDE 深度实战:可视化编排、断点调试与生产级运维全指南
运维·前端·ide