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]];
};