概述
- 本文次要介绍 React 在不同环境模式下,更新 fiber 的流程和区别
-
React 有 3 种工作模式
- legacy 模式:React17 及以下临时都默认应用该模式,其特点是更新队列中的工作都是同步执行
- blocking 模式:该模式是 concurrent 模式的适度版本,发放局部 concurrent 性能
- concurrent 模式:该模式 React18 中会提供凋谢抉择,其特点是 实现 fiber 的异步更新 ,会依据 fiber 根节点的优先级 调度执行更新队列中的工作,实现异步更新
legacy 模式下,React 做了什么
- 会创立整个利用的根节点、以后 fiebr 构造
- 创立 fibre 更新队列,updateQueue
- 创立 update 对象,每个产生更新的 fiber 节点都会创立,蕴含更新的优先级和更新内容
- update 对象创立实现后,会递归到根节点,将 update 对象增加到更新队列 updateQueue 中,根节点此时也会记录以后的更新工作的优先级(legacy 模式用不到)
- 根节点递归向下执行,执行更新队列中工作,更新对应的 fiber 节点
- fibre 更新实现后,进入 perfromSyncWorkReact,进入 render 阶段
- render 阶段完结后,进入 commit 阶段
- commit 阶段完结后,进入 layout 阶段
- 批改 current 指针,更新实现
### concurrent 模式下,与 legacy 模式的区别
- 后面 5 步都与 legacy 模式雷同,区别在于执行更新队列 updateQueue 时,并不是同步执行,而是依据优先级不同,移步执行
-
当产生更新的 fibre 将 update 对象递归到根节点后,根节点会记录优先级,比方是 2。
- 在向下递归更新过程中会将优先级是 2 的工作先执行。
- 若此时有新的更新触发,且优先级更高,比方 1. 根节点记录的优先级会被批改,且打断以后正在执行的更新工作,转而执行优先级为 1 的工作
- 直到更新队列中的工作全副执行完,进入 perfromConcurrentWorkReact, 进入 render 阶段
- 后续的流程与 legacy 模式雷同,直到 current 指针替换,页面更新实现