11.useState:为什么可以保存上一次的值

# 11.useState:为什么可以保存上一次的值

# 直观理解

useState 并不是把状态存在函数里,而是把状态挂在 React 当前组件对应的 Fiber 节点上。组件函数每次重新执行时,React 会按照 Hook 调用顺序,把上一次保存的状态重新取出来。

# 为什么顺序很重要

React 内部不是通过变量名识别 Hook,而是通过“第几个 Hook”来匹配状态。所以 Hook 不能放在条件语句或循环里,否则下一次渲染时顺序对不上,状态就会错位。

# 状态更新过程

  1. 调用 setState 时,不会立刻改当前变量,而是把更新放入队列。
  2. React 下一次调度渲染时,读取旧状态和更新队列。
  3. 按顺序计算出新状态,再交给本次渲染使用。

# 简化理解

可以把它理解成:

const hooks = [];
let currentIndex = 0;
1
2

每次调用 useState 时,React 都在同一个存储结构里按顺序取值和写值。

# 结论

useState 能保留上一次的值,不是因为闭包魔法,而是因为 React 在组件外部维护了一套稳定的 Hook 状态存储机制。

Last Updated: 9/25/2026, 2:08:32 PM