7kms/react-illustration-series

fiber 初次构造中 performUnitOfWork 首次调用前的内存状态

Closed this issue · 2 comments

在 fibertree-create.md 的 “过程图解” 小节中对于 performUnitOfWork 第一次调用(只执行 beginWork ) 的描述如下:

执行前: workInProgress指针指向HostRootFiber.alternate对象, 此时current = workInProgress.alternate指向fiberRoot.current是非空的(初次构造, 只在根节点时, current非空).

在执行前 FiberRoot.current 指向的 HostRootFiber 到底是不是为 null?

有的方法会根据 current === null 来判断是否为初次渲染,但是如果这个值为 null,怎么会有 alternate 属性?

先提前感谢大佬解答

7kms commented

HostRootFiber是在启动阶段就构造出来的,它是第一个fiber,非常特殊,还没有进入到fiber树的构建就已经存在了。
进入fiber树构造阶段,第一步会创建HostRootFiber.alternate,这个值就是workInProgress的起点。所以此时的workInProgress.alternate指向HostRootFiber,即fiberRoot.current

HostRootFiber是在启动阶段就构造出来的,它是第一个fiber,非常特殊,还没有进入到fiber树的构建就已经存在了。 进入fiber树构造阶段,第一步会创建HostRootFiber.alternate,这个值就是workInProgress的起点。所以此时的workInProgress.alternate指向HostRootFiber,即fiberRoot.current

好的,我再打断点观察一下 谢谢大佬~