React 18 源代码 14 commitLayoutEffe
2022-09-20 本文已影响0人
吴摩西
commitMutationEffectsOnFiber
虽然已经将 DOM 插入,不过当前 Javascript 阶段尚未结束,浏览器尚未得到时机执行 layout 或者 paint。请参考 Rendering Performance

如上图,目前尚处在黄色的区域。
执行完 commitMutationEffectsOnFiber
后,会执行 commitLayoutEffects
,这个阶段,会执行 recursivelyTraverseLayoutEffects
,递归遍历所有的 child 和 sibling,执行 commitLayoutEffectOnFiber

这个过程是一个深度优先遍历,会遍历所有的 element,对于原生的 div, span 来说,不会有 useLayoutEffect
,对于 FunctionComponent(0)
, ForwardRef(11)
, SimpleMemoComponent(15)
来说,执行updateQueue
中所有的 effect,执行 useLayoutEffect
中的回调,返回值也存储在 effect.destroy
中。