为什么 hook 不能写在条件判断里
结论:React 通过“调用顺序”把每次
useXxx对应到 Fiber 上的第 N 个 Hook 节点;条件分支会让顺序变化,导致读写错位,产生不可预测的 bug。
1. 底层原因(一句话)
- Hooks 状态存放在 Fiber 的 Hook 链表里,按调用顺序推进指针读取/写入
2. 会导致什么问题
- 本该读到
useState(A)的位置却读到useEffect的位置 - 表现为:状态串位、effect 错乱、甚至直接报错
3. 正确写法
- 把条件放进 Hook 内部(例如 effect 内部 early return)
- 或者拆分组件:用不同组件表达不同分支