diff --git a/React 的源码深入/React 的流程解析 - Fiber 递归/React 的流程解析 - Fiber 递归.md b/React 的源码深入/React 的流程解析 - Fiber 递归/React 的流程解析 - Fiber 递归.md index 9d0fea8..0c8216a 100644 --- a/React 的源码深入/React 的流程解析 - Fiber 递归/React 的流程解析 - Fiber 递归.md +++ b/React 的源码深入/React 的流程解析 - Fiber 递归/React 的流程解析 - Fiber 递归.md @@ -7,13 +7,7 @@ ## 首屏渲染 -React 的首屏渲染时会交由 createWorkInProgress 函数生成一个 `WorkInProgress Fiber` 节点,这个节点就是 FiberNode,所以我们从 createWorkInProgress 函数开始讲解 React 中 Fiber 创建的流程,这个函数的主要工作就是根据 - -### createWorkInProgress - -React 的首屏渲染时会交由 `createWorkInProgress` 函数生成一个 `WorkInProgress Fiber` 节点,这个节点就是 FiberNode,`createWorkInProgress` 接收两个参数,分别是 `current` 和 `pendingProps`,这里的 `pendingProps` 是组件的属性 -因为传入的是 `current Fiber` 树,所以 `createWorkInProgress` 内会从 `current` 的 `alternate` 取出中取出与之链接的 `WorkInProgress Fiber` 节点,并对其做空值判断,因为对于首屏渲染而言,`WorkInProgress` 是不存在的,所以会走到不存在 `WorkInProgress` 的逻辑,在这里也就是调用 `createFiber` 函数,这个函数会更加传递的参数 `new` 一个 Fiber 的实例,其内部并没有什么复杂的逻辑,而是对 Fiber 节点的属性进行了初始化,`createFiber` 返回之后,会对返回的 FiberNode 节点进行赋值,复用 `current FiberNode` 节点的内容,并对它们各自的 `alternate` 进行赋值,双向链接 -`createWorkInProgress` 之后,Fiber 的操作就会交由 `beginWork` 和 `completeWork` 开始正式的递归 +React 的首屏渲染时会交由 createWorkInProgress 函数生成 WorkInProgress 的第一个 Fiber 节点,这个节点就是 FiberNode,所以我们从 createWorkInProgress 函数开始讲解 React 中 Fiber 创建的流程,这个函数的主要工作就是根据传入的 Fiber 节点的 alternate 属性是否存在判断复用 Fiber 节点还是创建新的 Fiber 节点,具体的函数深入解析可以看 [[React 的深入探索 - createWorkInProgress]] ### beginWork diff --git a/React 的源码深入/React 的流程解析 - Fiber 递归/React 的深入探索 - createWorkInProgress.md b/React 的源码深入/React 的流程解析 - Fiber 递归/React 的深入探索 - createWorkInProgress.md index ac6b338..0440bdb 100644 --- a/React 的源码深入/React 的流程解析 - Fiber 递归/React 的深入探索 - createWorkInProgress.md +++ b/React 的源码深入/React 的流程解析 - Fiber 递归/React 的深入探索 - createWorkInProgress.md @@ -1 +1,7 @@ ->这个函数的任务是创建 WorkInProgress 树的 Fiber 节点,更加传入参数的判断是复用已有的 Fiber 节点或是创建新的 Fiber 节点 \ No newline at end of file +>这个函数的任务是创建 WorkInProgress 树的 Fiber 节点,更加传入参数的判断是复用已有的 Fiber 节点或是创建新的 Fiber 节点 + +### createWorkInProgress + +React 的首屏渲染时会交由 `createWorkInProgress` 函数生成一个 `WorkInProgress Fiber` 节点,这个节点就是 FiberNode,`createWorkInProgress` 接收两个参数,分别是 `current` 和 `pendingProps`,这里的 `pendingProps` 是组件的属性 +因为传入的是 `current Fiber` 树,所以 `createWorkInProgress` 内会从 `current` 的 `alternate` 取出中取出与之链接的 `WorkInProgress Fiber` 节点,并对其做空值判断,因为对于首屏渲染而言,`WorkInProgress` 是不存在的,所以会走到不存在 `WorkInProgress` 的逻辑,在这里也就是调用 `createFiber` 函数,这个函数会更加传递的参数 `new` 一个 Fiber 的实例,其内部并没有什么复杂的逻辑,而是对 Fiber 节点的属性进行了初始化,`createFiber` 返回之后,会对返回的 FiberNode 节点进行赋值,复用 `current FiberNode` 节点的内容,并对它们各自的 `alternate` 进行赋值,双向链接 +`createWorkInProgress` 之后,Fiber 的操作就会交由 `beginWork` 和 `completeWork` 开始正式的递归 \ No newline at end of file