7kms / react-illustration-series

图解react源码, 用大量配图的方式, 致力于将react原理表述清楚.
http://7km.top/
GNU Affero General Public License v3.0
7.5k stars 804 forks source link

completeUnitOfWork 中 if 条件的含义 #70

Open DaphnisLi opened 2 years ago

DaphnisLi commented 2 years ago

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

image
jacty commented 2 years ago

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

7kms commented 2 years ago

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

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

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

DaphnisLi commented 2 years ago

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

7kms commented 2 years ago

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

DaphnisLi commented 2 years ago

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

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

7kms commented 2 years ago

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

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

是的呀

creamidea commented 2 years ago

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