From a7d9e42708498a0bbeb7bafc3a70c02b19111b63 Mon Sep 17 00:00:00 2001 From: YuJian Date: Tue, 28 Jun 2022 14:52:05 +0800 Subject: [PATCH] vault backup: 2022-06-28 14:52:05 --- .../React 的深入探索 - beginWork.md | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/React 的深入探索/React 的流程解析 - Fiber 递归/React 的深入探索 - beginWork.md b/React 的深入探索/React 的流程解析 - Fiber 递归/React 的深入探索 - beginWork.md index be1b30c..7cfbf75 100644 --- a/React 的深入探索/React 的流程解析 - Fiber 递归/React 的深入探索 - beginWork.md +++ b/React 的深入探索/React 的流程解析 - Fiber 递归/React 的深入探索 - beginWork.md @@ -100,12 +100,9 @@ if ((current.flags & ForceUpdateForLegacySuspense) !== NoFlags) { } ``` - ### current 为空 -首先 didReceiveUpdate 会被赋值为 false - -紧接着会进入一个似乎关于 SSR 服务端渲染的判断逻辑,代码内容如下,这一段代码的行为还不清楚,暂时先跳过 +首先 didReceiveUpdate 会被赋值为 false,紧接着会进入一个似乎关于 SSR 服务端渲染的判断逻辑,代码内容如下,这一段代码的行为还不清楚,暂时先跳过 ```javascript didReceiveUpdate = false; @@ -125,6 +122,14 @@ if (getIsHydrating() && isForkedChild(workInProgress)) { ## 正式 beginWork 阶段 +```javascript +workInProgress.lanes = NoLanes; + +switch (workInProgress.tag) { + case IndeterminateComponent: + . +} +``` 在本次首屏渲染中,以上的条件都为否,会进入后续条件判断,在后续的条件判断中主要是为了应付一些特殊的场景,例如错误边界和 legacy 模式,可以看到官方留下的代码注释,在我们现在的场景下,最终会走到 didReceiveUpdate 为 false 的情况下,也就是当前 Fiber 并没有变化,因为在之前的 createWorkInProgress 中 WorkFiberProgress 被赋值上了 current Fiber 的同名属性,所以它们会是相同的两个 FIber 节点,在这里的代码可以看到:beginWork 中还有对优先值 lanes 的一些处理,在这里先不展开,后续再补充