react-illustration-series icon indicating copy to clipboard operation
react-illustration-series copied to clipboard

completeUnitOfWork 中 if 条件的含义

Open DaphnisLi opened this issue 2 years ago • 7 comments

这里的 if 条件含义是什么?

image

DaphnisLi avatar Mar 08 '22 12:03 DaphnisLi

当 completedWork.flags 的值表示还有“副作用”存在的话进入下一个循环查找该“副作用”存在于哪个Fiber 上并进行相应的增删改查处理。

jacty avatar Mar 10 '22 18:03 jacty

这里确切来讲是异常判断, completeUnitOfWork正常来讲就是深度优先遍历的回溯阶段会调用. 特殊情况就是在beginWork阶段发生异常, 也会调用, 这时候completeWork.flags中会包含Incomplete. 所以这里有个if判断, 不同情况下的处理不一样.

可以对照一下源码中的英文注释

https://github.com/facebook/react/blob/v17.0.2/packages/react-reconciler/src/ReactFiberWorkLoop.old.js#L1682

7kms avatar Mar 11 '22 02:03 7kms

这里确切来讲是异常判断, 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 上” ?

DaphnisLi avatar Mar 11 '22 06:03 DaphnisLi

异常就是指出现了代码运行时错误, 会设置completeWork.flags |= Incomplete

7kms avatar Mar 11 '22 09:03 7kms

异常就是指出现了代码运行时错误, 会设置completeWork.flags |= Incomplete

根本原因还是 报错影响了 fiber 树的构建吧?

DaphnisLi avatar Mar 11 '22 10:03 DaphnisLi

异常就是指出现了代码运行时错误, 会设置completeWork.flags |= Incomplete

根本原因还是 报错影响了 fiber 树的构建吧?

是的呀

7kms avatar Mar 29 '22 02:03 7kms

Incomplete 目前看有 2 个情况会使用到:一个 ErrorBoundary,另一个 Suspense

creamidea avatar Jun 13 '22 14:06 creamidea