概述

  • 本文次要介绍React在不同环境模式下,更新fiber的流程和区别
  • React有3种工作模式

    1. legacy模式: React17及以下临时都默认应用该模式,其特点是更新队列中的工作都是同步执行
    2. blocking模式:该模式是concurrent模式的适度版本,发放局部concurrent性能
    3. concurrent模式:该模式React18中会提供凋谢抉择,其特点是实现fiber的异步更新,会依据fiber根节点的优先级调度执行更新队列中的工作,实现异步更新

legacy模式下,React做了什么

  1. 会创立整个利用的根节点、以后fiebr构造
  2. 创立fibre更新队列,updateQueue
  3. 创立update对象,每个产生更新的fiber节点都会创立,蕴含更新的优先级和更新内容
  4. update对象创立实现后,会递归到根节点,将update对象增加到更新队列updateQueue中,根节点此时也会记录以后的更新工作的优先级(legacy模式用不到)
  5. 根节点递归向下执行,执行更新队列中工作,更新对应的fiber节点
  6. fibre更新实现后,进入perfromSyncWorkReact,进入render阶段
  7. render阶段完结后,进入commit阶段
  8. commit阶段完结后,进入layout阶段
  9. 批改current指针,更新实现

### concurrent模式下,与legacy模式的区别

  • 后面5步都与legacy模式雷同,区别在于执行更新队列updateQueue时,并不是同步执行,而是依据优先级不同,移步执行
  • 当产生更新的fibre将update对象递归到根节点后,根节点会记录优先级,比方是2。

    1. 在向下递归更新过程中会将优先级是2的工作先执行。
    2. 若此时有新的更新触发,且优先级更高,比方1. 根节点记录的优先级会被批改,且打断以后正在执行的更新工作,转而执行优先级为1的工作
  • 直到更新队列中的工作全副执行完,进入perfromConcurrentWorkReact,进入render阶段
  • 后续的流程与legacy模式雷同,直到current指针替换,页面更新实现