概述
- 本文次要介绍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指针替换,页面更新实现