1
0
Fork 0
Browse Source

vault backup: 2022-04-16 10:29:44

master
YuJian920 3 years ago
parent
commit
32d821d7f8
  1. 4
      React 的源码深入/React Reconciler - Fiber 创建.md

4
React 的源码深入/React Reconciler - Fiber 创建.md

@ -5,8 +5,8 @@ @@ -5,8 +5,8 @@
在 React 中,视图的更新使用了双缓存的方式,也就是说在 React 运行时,同时有着两棵 Fiber 树,一颗是当前视图上的 Fiber 树,叫 current,另外一棵是存在内存当中的下一次视图更新时用的叫做 workInProgress,React 在构建时会创建整个 app 唯一的根 Fiber 节点,叫做 FiberRootNode,这个节点上有一个 current 指针,指向的是当前正在页面上显示的 Fiber 树也就是 current,当 workInProgress 递归生成完毕,指针会立即指向 workInProgress ,而旧的 current 就会在下一次渲染中变成 workInProgress ,就这样循环交替完成页面的递归渲染
## 首屏渲染
React 的首屏渲染时会交由 createWorkInProgress 函数生成一棵 WorkInProgress Fiber 树,createWorkInProgress 接收两个参数,分别是 current 和 pendingProps,这里的 pendingProps 是组件的属性
因为传入的是 current Fiber 树,所以 createWorkInProgress 内会从 current 的 alternate 取出中取出
React 的首屏渲染时会交由 createWorkInProgress 函数生成一个 WorkInProgress Fiber 节点 ,createWorkInProgress 接收两个参数,分别是 current 和 pendingProps,这里的 pendingProps 是组件的属性
因为传入的是 current Fiber 树,所以 createWorkInProgress 内会从 current 的 alternate 取出中取出与之链接的 WorkInProgress Fiber 节点,并对其做空值判断,因为对于首屏渲染而言,WorkInProgress 是不存在的,所以会走到不存在 WorkInProgress 的逻辑,在这里也就是调用 createFiber 函数,这个函数会更加传递的参数 new 一个 Fiber 的实例,其内部并没有什么复杂的逻辑,而是对 Fiber 节点的属性进行了初始化,createFiber 返回之后,会对返回的 Fiber
### 第一次触发更新

Loading…
Cancel
Save