BlogSeptember 28, 2026读源码读到的一半
从 useState 的实现里看懂了什么 我不是那种能把源码背下来的人。读 React 的 useState 大概花了一周,最后只记住三件事,但我觉得够了。
不在组件里,在 fiber 上。组件只是一个渲染函数,函数返回完就没了,所以状态必须挂在外面。
这也是为什么同一个组件渲染多次,各自的 state 不会串 —— 每次调用拿到的是自己那条 fiber 上的链表节点。
因为它只是把"要更新"这件事记下来,等当前这次渲染跑完再统一处理。
在事件里连续写三行 setX,不会触发三次渲染。这既是性能考虑,也让"一次交互一次渲染"这个模型成立。
因为它靠调用顺序匹配。第几次调用 useState,对应链表上的第几个节点。一旦这次渲染少调了一个,后面全部错位。
理解了这一点,eslint-plugin-react-hooks 那条规则就不再是"规范",而是"必然"。
读源码的收益不在记住实现,在于以后再遇到奇怪的行为,能猜到大概是哪一层的问题。