1
0
Fork 0
Browse Source

vault backup: 2022-04-26 15:47:42

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

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

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

Loading…
Cancel
Save