常见问题
速查表;原理见对应章节链接。
基础
和 Redux 比?
更少样板、无 Provider、无强制 reducer;DevTools/时间旅行靠中间件。大型团队规范 Redux 工具链更成熟。
和 Context 比?
Context 适合低频、小范围;全局频繁更新用 Zustand 避免全子树刷新。
必须要 Provider 吗?
不需要。多实例见 08 §1。
更新与合并
set 后嵌套字段丢了?
默认浅合并只改顶层 key;嵌套用展开或 immer。见 05。
set 了组件不更新?
检查选择器是否每次返回新引用;是否 Object.is 判定相等。见 07。
React / 并发
为什么要 React 18?
依赖 useSyncExternalStore。见 03、06。
SSR 要注意什么?getServerSnapshot 与客户端初始 state 一致;persist 水合可能闪动,常延迟到 client 再 rehydrate。
v5 与无限循环
Maximum update depth exceeded / 无限循环?
多见于选择器 (s) => ({ a: s.a }) 无 useShallow;或 selector 依赖每次变的对象。
参考:Discussion #2790、07 §7。
useShallow 何时用?
选择器返回对象、数组、元组时。
中间件
顺序怎么排?
内层先执行用户 state,外层包 persist/devtools。见 04。
生产要开 devtools 吗?
建议 enabled: p。
架构
一个大 store 还是多个?
中大型应用按域拆分;单 store + slices 也可。见 07 §5。
能在组件外改状态吗?
可以:useStore.getState() / setState / subscribe。
如何测试?
重置 state、createStore 独立实例、或 mock 模块。
总结
多数问题归为三类:浅合并误用、选择器引用不稳定、并发下错误订阅方式。优先查 [05][07][06],再查 GitHub Discussions。