Skip to content
目录

常见问题

速查表;原理见对应章节链接。


基础

和 Redux 比?
更少样板、无 Provider、无强制 reducer;DevTools/时间旅行靠中间件。大型团队规范 Redux 工具链更成熟。

和 Context 比?
Context 适合低频、小范围;全局频繁更新用 Zustand 避免全子树刷新。

必须要 Provider 吗?
不需要。多实例见 08 §1


更新与合并

set 后嵌套字段丢了?
默认浅合并只改顶层 key;嵌套用展开或 immer。见 05

set 了组件不更新?
检查选择器是否每次返回新引用;是否 Object.is 判定相等。见 07


React / 并发

为什么要 React 18?
依赖 useSyncExternalStore。见 0306

SSR 要注意什么?
getServerSnapshot 与客户端初始 state 一致;persist 水合可能闪动,常延迟到 client 再 rehydrate。


v5 与无限循环

Maximum update depth exceeded / 无限循环?
多见于选择器 (s) => ({ a: s.a })useShallow;或 selector 依赖每次变的对象。
参考:Discussion #279007 §7

useShallow 何时用?
选择器返回对象、数组、元组时。


中间件

顺序怎么排?
内层先执行用户 state,外层包 persist/devtools。见 04

生产要开 devtools 吗?
建议 enabled: process.env.NODE_ENV !== 'production'


架构

一个大 store 还是多个?
中大型应用按域拆分;单 store + slices 也可。见 07 §5

能在组件外改状态吗?
可以:useStore.getState() / setState / subscribe

如何测试?
重置 state、createStore 独立实例、或 mock 模块。


总结

多数问题归为三类:浅合并误用选择器引用不稳定并发下错误订阅方式。优先查 [05][07][06],再查 GitHub Discussions。

MIT License.