小于 1 分钟
React 状态更新
流程概览
类比分支管理的心智模型
在React
中,通过ReactDOM.createBlockingRoot
和ReactDOM.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
保存的updateQueue
即current updateQueue
workInProgress fiber
保存的updateQueue
即workInProgress updateQueue
在commit阶段
完成页面渲染后,workInProgress Fiber树
变为current Fiber树
,workInProgress Fiber树
内Fiber节点
的updateQueue
就变成current updateQueue
。