|
|
|
@ -48,6 +48,6 @@ completeWork 负责深度优先遍历中的回溯阶段,**它执行在递归
@@ -48,6 +48,6 @@ completeWork 负责深度优先遍历中的回溯阶段,**它执行在递归
|
|
|
|
|
|
|
|
|
|
如果最终回溯到了 Fiber 的起始节点,那么整个首屏渲染的 Fiber 递归渲染逻辑就完成了,最后会交由 commitRoot 函数进入 commit 阶段将其渲染到页面上:[[React 的流程解析 - commit阶段]] |
|
|
|
|
|
|
|
|
|
这里你可以会有一个疑惑,在 Fiber 递归阶段也就是 reconciler 阶段,会深度优先遍历找出所有的存在变化的 Fiber 节点,并将其打上对应的 effectTag,**那么进入 commit 阶段后,也需要再次进行一次深度优先遍历找出这些存在 effectTag 的 Fiber 节点吗?** |
|
|
|
|
这里你可能会有一个疑惑,在 Fiber 递归阶段也就是 reconciler 阶段,会深度优先遍历找出所有的存在变化的 Fiber 节点,并将其打上对应的 effectTag,**那么进入 commit 阶段后,也需要再次进行一次深度优先遍历找出这些存在 effectTag 的 Fiber 节点吗?** |
|
|
|
|
|
|
|
|
|
其实是不需要的,因为这样的效率太低了,在深度优先遍历的回溯阶段也就是 completeWork 的执行逻辑中,会将所有存在 effectTag 的 Fiber 节点通过单项链表的形式连接起来,这样在 commit 阶段的时候只需要遍历这一条链表就能快速的找到发生了变化的 Fiber 节点:[[effectList 的生成]] |