|
|
@ -100,12 +100,9 @@ if ((current.flags & ForceUpdateForLegacySuspense) !== NoFlags) { |
|
|
|
} |
|
|
|
} |
|
|
|
``` |
|
|
|
``` |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### current 为空 |
|
|
|
### current 为空 |
|
|
|
|
|
|
|
|
|
|
|
首先 didReceiveUpdate 会被赋值为 false |
|
|
|
首先 didReceiveUpdate 会被赋值为 false,紧接着会进入一个似乎关于 SSR 服务端渲染的判断逻辑,代码内容如下,这一段代码的行为还不清楚,暂时先跳过 |
|
|
|
|
|
|
|
|
|
|
|
紧接着会进入一个似乎关于 SSR 服务端渲染的判断逻辑,代码内容如下,这一段代码的行为还不清楚,暂时先跳过 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
```javascript |
|
|
|
```javascript |
|
|
|
didReceiveUpdate = false; |
|
|
|
didReceiveUpdate = false; |
|
|
@ -125,6 +122,14 @@ if (getIsHydrating() && isForkedChild(workInProgress)) { |
|
|
|
|
|
|
|
|
|
|
|
## 正式 beginWork 阶段 |
|
|
|
## 正式 beginWork 阶段 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
```javascript |
|
|
|
|
|
|
|
workInProgress.lanes = NoLanes; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
switch (workInProgress.tag) { |
|
|
|
|
|
|
|
case IndeterminateComponent: |
|
|
|
|
|
|
|
. |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
在本次首屏渲染中,以上的条件都为否,会进入后续条件判断,在后续的条件判断中主要是为了应付一些特殊的场景,例如错误边界和 legacy 模式,可以看到官方留下的代码注释,在我们现在的场景下,最终会走到 didReceiveUpdate 为 false 的情况下,也就是当前 Fiber 并没有变化,因为在之前的 createWorkInProgress 中 WorkFiberProgress 被赋值上了 current Fiber 的同名属性,所以它们会是相同的两个 FIber 节点,在这里的代码可以看到:beginWork 中还有对优先值 lanes 的一些处理,在这里先不展开,后续再补充 |
|
|
|
在本次首屏渲染中,以上的条件都为否,会进入后续条件判断,在后续的条件判断中主要是为了应付一些特殊的场景,例如错误边界和 legacy 模式,可以看到官方留下的代码注释,在我们现在的场景下,最终会走到 didReceiveUpdate 为 false 的情况下,也就是当前 Fiber 并没有变化,因为在之前的 createWorkInProgress 中 WorkFiberProgress 被赋值上了 current Fiber 的同名属性,所以它们会是相同的两个 FIber 节点,在这里的代码可以看到:beginWork 中还有对优先值 lanes 的一些处理,在这里先不展开,后续再补充 |
|
|
|