1
0
Fork 0
Browse Source

vault backup: 2022-04-26 16:52:42

master
YuJian 3 years ago
parent
commit
a832d85d26
  1. 2
      React 的源码深入/React 的流程解析 - commit 阶段/React 的流程解析 - commit阶段.md

2
React 的源码深入/React 的流程解析 - commit 阶段/React 的流程解析 - commit阶段.md

@ -12,7 +12,7 @@ do { @@ -12,7 +12,7 @@ do {
} while (rootWithPendingPassiveEffects !== null);
```
这个循环的跳出条件是 rootWithPendingPassiveEffects 等于 null,不然就执行 flushPassiveEffects 函数,那么 rootWithPendingPassiveEffects 是什么?为什么要执行 flushPassiveEffects 函数,这个 rootWithPendingPassiveEffects 就是在 completeWork 阶段生成的带有 effectTag 的链表 effectList,而 flushPassiveEffects 函数内部会遍历这个链表,然后执行其各自内部的 useEffect 中的回调函数,在 commitRootImpl 开头执行是因为这些回调函数有可能触发新的渲染,所以需要遍历直到没有任务
这个循环的跳出条件是 rootWithPendingPassiveEffects 等于 null,不然就执行 flushPassiveEffects 函数,那么 rootWithPendingPassiveEffects 是什么?为什么要执行 flushPassiveEffects 函数,这个 rootWithPendingPassiveEffects 就是带有 PassiveEffects 标记的链表,而 flushPassiveEffects 函数内部会遍历这个链表,然后执行其各自内部的 useEffect 中的回调函数,也就是说开头的循环是为了检查是否存在还未执行的 useEffect 回调函数,而这些回调函数有可能触发新的渲染,所以需要遍历直到没有任务
接下来会执行 flushRenderPhaseStrictModeWarningsInDEV 函数,这个函数从名字上看出之和开发环境下有关,负责 React 中的 StrictMode

Loading…
Cancel
Save