React实现useState的原理

51 阅读1分钟

useState用于函数组件中添加状态。它返回一个状态变量和一个更新这个状态的函数。在底层,useState是通过React的内部机制和调度算法来实现的。

原理:在react中,只有当state发生改变之后,组件才会更新。useState接收两个参数,第一个为state的值,第二个是更新该值的箭头函数,通过函数实现值的更新,接着就是视图的更新。

基本原理

1.初始渲染:

当你第一次调用useState时,React会创建一个状态变量,并将其初始值存储在内部的一个对象中。 React还会在组件的Fiber节点上创建一个链表,用于存储每个useState调用的状态。 返回状态变量和更新状态的函数。

2.状态更新:

当你调用返回的setter函数时,React会将新的状态值存储在内部对象中,并将该组件标记为需要更新(dirty)。 在下一次渲染时,React会看到组件被标记为需要更新,并会重新调用函数组件。 在重新调用函数组件时,useState会读取内部对象中的最新状态值,并返回它。

3.保留状态顺序

React依赖于useState调用的顺序来正确地关联状态和组件。

const states = [];  // 用于存储所有 useState 的状态
const setters = []; // 用于存储所有对应的 setter 函数
let index = 0;      // 当前组件的 useState 调用索引

const useState = (infoValue) => {
  // 如果是首次渲染,初始化状态
  if (states[index] === undefined) {
    states[index] = infoValue;
    setters[index] = (newValue) => {
      states[index] = newValue;
    };
  }
  return [states[index], setters[index]];
};