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
1.3 KiB
首先先来看一段代码
这是 React 中创建 memorizedState 链表的过程,注意其中 if 代码块中,赋值都使用到了两个等于号,因为这个函数的作用是在 Fiber 链表中创建一个新的 memorizedState 对象,那么这个函数的最终目的也是需要把创建好的 memorizedState 给返回出来,这里的两个连续等于号就相当于一直引用最新 Fiber 节点的 memorizedState 对象,最终给返回出来,看懂的时候感觉是真的牛逼
简单的源码解析:
- 创建一个 hook 对象,这个创建的 hook 对象最终需要插入到 Fiber 节点中,用 next 连接起来形成一个链表,链接的下一个节点就是下一个被使用的 hook
- 判断 workInProgressHook 是否为空,这个 workInProgressHook 永远指向最新的 Fiber 节点中的 memorizedState
- 如果为空表示当前是 Fiber 的第一个 hook,那么就会在当前 Fiber 中初始化 memorizedState 属性并传入创建的 hook 对象用于初始化,并返回最新的 Fiber memorizedState 对象的引用
- 如果不为空,表示之前已经初始化过 hook,会在最新的 Fiber 中创建新的链接 next,并传入创建的 hook 对象用于初始化,返回最新的 Fiber memorizedState 对象的引用