Closed kizuner-bonely closed 2 years ago
HostRootFiber是在启动阶段就构造出来的,它是第一个fiber,非常特殊,还没有进入到fiber树的构建就已经存在了。 进入fiber树构造阶段,第一步会创建HostRootFiber.alternate,这个值就是workInProgress的起点。所以此时的workInProgress.alternate指向HostRootFiber,即fiberRoot.current
HostRootFiber是在启动阶段就构造出来的,它是第一个fiber,非常特殊,还没有进入到fiber树的构建就已经存在了。 进入fiber树构造阶段,第一步会创建HostRootFiber.alternate,这个值就是workInProgress的起点。所以此时的workInProgress.alternate指向HostRootFiber,即fiberRoot.current
好的,我再打断点观察一下 谢谢大佬~
在 fibertree-create.md 的 “过程图解” 小节中对于 performUnitOfWork 第一次调用(只执行 beginWork ) 的描述如下:
执行前:
workInProgress
指针指向HostRootFiber.alternate
对象, 此时current = workInProgress.alternate
指向fiberRoot.current
是非空的(初次构造, 只在根节点时,current
非空).在执行前 FiberRoot.current 指向的 HostRootFiber 到底是不是为 null?
有的方法会根据 current === null 来判断是否为初次渲染,但是如果这个值为 null,怎么会有 alternate 属性?
先提前感谢大佬解答