栈结构 与 workInProgress
一句话结论:React 用“workInProgress 指针 + Fiber 的 return/sibling 链”模拟深度优先遍历,避免依赖真实调用栈,从而支持暂停与恢复。
1. 为什么不用真实递归栈
- 真实递归不可控:难以在中途安全暂停并恢复
- Fiber 的目标:把工作变成“可调度的迭代”,让出主线程
2. workInProgress 是什么
- 指向当前正在处理的 Fiber 节点
- beginWork 进入子树:
workInProgress = workInProgress.child - completeWork 返回:沿
return回溯,并通过sibling转向兄弟
3. 结果:中断恢复很自然
- 暂停时只需保留当前
workInProgress与相关上下文 - 下次继续时从该指针恢复遍历