1
0
Fork 0
Browse Source

vault backup: 2022-06-28 11:43:53

master
YuJian 2 years ago
parent
commit
08aa0198c2
  1. 6
      React 的深入探索/React 的流程解析 - Fiber 递归/React 的深入探索 - beginWork.md

6
React 的深入探索/React 的流程解析 - Fiber 递归/React 的深入探索 - beginWork.md

@ -68,8 +68,8 @@ if ( @@ -68,8 +68,8 @@ if (
此时会先调用 checkScheduledUpdateOrContext 函数检查 current 是否存在优先级相关的更新,关于 React 优先级相关我们先暂且按表不谈,进入 if 判断
- 不存在优先级相关的更新且 workInProgress 节点不存在 DidCapture flag
- 跳过后续的正式 beginWork 阶段,进入 baliout 也就是组件复用逻辑
- 以上判断条件不成立,判断当前 current 节点是否存在 ForceUpdateForLegacySuspense flag
- True:跳过后续的正式 beginWork 阶段,进入 baliout 也就是组件复用逻辑
- False:判断当前 current 节点是否存在 ForceUpdateForLegacySuspense flag
- True:didReceiveUpdate 赋值为 true
- False:didReceiveUpdate 赋值为 false
@ -100,7 +100,7 @@ if ((current.flags & ForceUpdateForLegacySuspense) !== NoFlags) { @@ -100,7 +100,7 @@ if ((current.flags & ForceUpdateForLegacySuspense) !== NoFlags) {
}
```
至此 current 不为空的逻辑就结束了,我们可以在这里做个小小的总结:**在 beginWork 阶段 React 会先判断当前组件是否发生变化需要更新, 是否可以复用,满足复用条件情况下进入 baliout 逻辑不再创建新的 Fiber 节点,从中可以看到对于特殊组件如Suspense 而言可能并不会进入 baliout 逻辑**
至此 current 不为空的逻辑就结束了,我们可以在这里做个小小的总结:**在 前beginWork 阶段主要是判断当前组件是否发生变化需要更新, 是否可以复用,满足复用条件情况下会跳过 正式beginWork 阶段进入 baliout 逻辑不再创建新的 Fiber 节点,从中可以看到对于特殊组件如 Suspense 而言可能并不会进入 baliout 逻辑**
在此之外我们也可以看到一些很有意思的点:**对于组件新旧 props 对比使用的是简单的三等判断**

Loading…
Cancel
Save