Notes

为什么 hook 不能写在条件判断里

结论:React 通过“调用顺序”把每次 useXxx 对应到 Fiber 上的第 N 个 Hook 节点;条件分支会让顺序变化,导致读写错位,产生不可预测的 bug。

1. 底层原因(一句话)

  • Hooks 状态存放在 Fiber 的 Hook 链表里,按调用顺序推进指针读取/写入

2. 会导致什么问题

  • 本该读到 useState(A) 的位置却读到 useEffect 的位置
  • 表现为:状态串位、effect 错乱、甚至直接报错

3. 正确写法

  • 把条件放进 Hook 内部(例如 effect 内部 early return)
  • 或者拆分组件:用不同组件表达不同分支

关联阅读

cd ..