completeUnitOfWork 里面的firstEffect,lastEffect ,没有明白为什么这么做?为什么串联起来。

来源:6-1 completeUnitOfWork的整体流程和意义

宝慕林6116383

2022-12-11

写回答

1回答

好帮手慕小李

2025-02-10

在 React 的 completeUnitOfWork 函数中,firstEffectlastEffect 被用来维护一个副作用(side-effect)链表。这个链表记录了所有需要在 commit 阶段执行的副作用操作。在 completeUnitOfWork 函数中,当一个 Fiber 节点完成时,它的副作用会被添加到父节点的副作用链表中。具体来说,如果父节点的 firstEffectnull,则直接将当前节点的 firstEffect 赋值给父节点的 firstEffect;如果父节点已经有副作用,则将当前节点的 firstEffect 链接到父节点的 lastEffectnextEffect 上,并更新父节点的 lastEffect 为当前节点的 lastEffect。这样做的目的是为了在 commit 阶段能够方便地遍历这个链表,执行所有需要的副作用操作。

此外,completeUnitOfWork 函数中会完成这一步,把所有的effect节点进行一个串联,让 commitWork 的阶段可以非常方便的根据这个链去执行每一个节点的最终的操作。这个链状结构最终是用于 commitWork 的时候用来进行对这些有 SideEffect的节点进行 commit 的一个操作。


0
0

React源码深度解析 高级前端工程师必备技能

掌握React源码,让你的开发水平没有上限,更不惧前端未来的到来

1749 学习 · 336 问题

查看课程