react-illustration-series
react-illustration-series copied to clipboard
completeUnitOfWork 中 if 条件的含义
这里的 if 条件含义是什么?

当 completedWork.flags 的值表示还有“副作用”存在的话进入下一个循环查找该“副作用”存在于哪个Fiber 上并进行相应的增删改查处理。
这里确切来讲是异常判断, completeUnitOfWork
正常来讲就是深度优先遍历的回溯阶段会调用.
特殊情况就是在beginWork
阶段发生异常, 也会调用, 这时候completeWork.flags中会包含Incomplete
. 所以这里有个if判断, 不同情况下的处理不一样.
可以对照一下源码中的英文注释
https://github.com/facebook/react/blob/v17.0.2/packages/react-reconciler/src/ReactFiberWorkLoop.old.js#L1682
这里确切来讲是异常判断,
completeUnitOfWork
正常来讲就是深度优先遍历的回溯阶段会调用. 特殊情况就是在beginWork
阶段发生异常, 也会调用, 这时候completeWork.flags中会包含Incomplete
. 所以这里有个if判断, 不同情况下的处理不一样.可以对照一下源码中的英文注释
https://github.com/facebook/react/blob/v17.0.2/packages/react-reconciler/src/ReactFiberWorkLoop.old.js#L1682
beginWork 阶段的异常情况指的是 “并没有把该 fiber 节点的所有副作用都设置到 fiber.flags 上” ?
异常就是指出现了代码运行时错误, 会设置completeWork.flags |= Incomplete
异常就是指出现了代码运行时错误, 会设置
completeWork.flags |= Incomplete
根本原因还是 报错影响了 fiber 树的构建吧?
异常就是指出现了代码运行时错误, 会设置
completeWork.flags |= Incomplete
根本原因还是 报错影响了 fiber 树的构建吧?
是的呀
Incomplete 目前看有 2 个情况会使用到:一个 ErrorBoundary,另一个 Suspense