completeUnitOfWork 里面的firstEffect,lastEffect ,没有明白为什么这么做?为什么串联起来。
来源:6-1 completeUnitOfWork的整体流程和意义
宝慕林6116383
2022-12-11
写回答
1回答
-
好帮手慕小李
2025-02-10
在 React 的
completeUnitOfWork函数中,firstEffect和lastEffect被用来维护一个副作用(side-effect)链表。这个链表记录了所有需要在 commit 阶段执行的副作用操作。在completeUnitOfWork函数中,当一个 Fiber 节点完成时,它的副作用会被添加到父节点的副作用链表中。具体来说,如果父节点的firstEffect为null,则直接将当前节点的firstEffect赋值给父节点的firstEffect;如果父节点已经有副作用,则将当前节点的firstEffect链接到父节点的lastEffect的nextEffect上,并更新父节点的lastEffect为当前节点的lastEffect。这样做的目的是为了在 commit 阶段能够方便地遍历这个链表,执行所有需要的副作用操作。此外,
completeUnitOfWork函数中会完成这一步,把所有的effect节点进行一个串联,让commitWork的阶段可以非常方便的根据这个链去执行每一个节点的最终的操作。这个链状结构最终是用于 commitWork 的时候用来进行对这些有 SideEffect的节点进行 commit 的一个操作。00
相似问题