该函数的功能是创建一个新的fiber节点作为当前fiber节点的workInProgress。

执行过程如下:

  1. 首先,获取当前fiber节点的alternate节点,如果alternate节点为null,则说明当前fiber节点是第一次渲染,需要创建一个新的workInProgress节点。
  2. 如果alternate节点为null,则创建一个新的fiber节点,类型和属性与当前节点相同,并将其设置为当前fiber节点的alternate节点。同时,将当前节点设置为新创建的workInProgress节点的alternate节点。
  3. 如果alternate节点存在,则表示当前fiber节点已经有一个workInProgress节点,直接将新的属性(pendingProps)赋值给workInProgress节点即可。
  4. 重置workInProgress节点的effect tag为NoFlags,清空effects链表。
  5. 复制当前fiber节点的一些属性到workInProgress节点,如childLanes、lanes、child、memoizedProps、memoizedState、updateQueue等。
  6. 克隆当前fiber节点的dependencies对象到workInProgress节点的dependencies属性。
  7. 最后,将workInProgress节点的一些属性设置为当前fiber节点的对应属性,如sibling、index、ref等。
  8. 返回新创建的workInProgress节点
function createWorkInProgresscurrent Fiber pendingProps any Fiber let workInProgress = currentalternate; if workInProgress === null We use a double buffering pooling technique because we know

原文地址: http://www.cveoy.top/t/topic/iGg5 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录