1
0
Fork 0
Obsidian 管理的个人笔记仓库
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

1.3 KiB

首先先来看一段代码

!简单的 React 思考 - Fiber 创建.png

这是 React 中创建 memorizedState 链表的过程,注意其中 if 代码块中,赋值都使用到了两个等于号,因为这个函数的作用是在 Fiber 链表中创建一个新的 memorizedState 对象,那么这个函数的最终目的也是需要把创建好的 memorizedState 给返回出来,这里的两个连续等于号就相当于一直引用最新 Fiber 节点的 memorizedState 对象,最终给返回出来,看懂的时候感觉是真的牛逼

简单的源码解析:

  1. 创建一个 hook 对象,这个创建的 hook 对象最终需要插入到 Fiber 节点中,用 next 连接起来形成一个链表,链接的下一个节点就是下一个被使用的 hook
  2. 判断 workInProgressHook 是否为空,这个 workInProgressHook 永远指向最新的 Fiber 节点中的 memorizedState
    • 如果为空表示当前是 Fiber 的第一个 hook,那么就会在当前 Fiber 中初始化 memorizedState 属性并传入创建的 hook 对象用于初始化,并返回最新的 Fiber memorizedState 对象的引用
    • 如果不为空,表示之前已经初始化过 hook,会在最新的 Fiber 中创建新的链接 next,并传入创建的 hook 对象用于初始化,返回最新的 Fiber memorizedState 对象的引用