跳至主要內容

Yihui小于 1 分钟

React 状态更新

流程概览

类比分支管理的心智模型

React中,通过ReactDOM.createBlockingRootReactDOM.createRoot创建的应用会采用并发的方式更新状态

高优更新(红色节点)中断正在进行中的低优更新(蓝色节点),先完成render - commit流程

高优更新完成后,低优更新基于高优更新的结果重新更新

Update 对象

Update与Fiber的联系

Fiber节点组成Fiber树,页面中最多同时存在两棵Fiber树

  • 代表当前页面状态的current Fiber树
  • 代表正在render阶段workInProgress Fiber树

类似Fiber节点组成Fiber树Fiber节点上的多个Update会组成链表并被包含在fiber.updateQueue中。

什么情况下一个Fiber节点会存在多个Update?

方法内部多次调用this.setState

Fiber节点最多同时存在两个updateQueue

  • current fiber保存的updateQueuecurrent updateQueue
  • workInProgress fiber保存的updateQueueworkInProgress updateQueue

commit阶段完成页面渲染后,workInProgress Fiber树变为current Fiber树workInProgress Fiber树Fiber节点updateQueue就变成current updateQueue

updateQueue