标准答案
- Redux 使用单向数据流、action、reducer 和不可变更新,适合复杂协作、调试和约束强的团队。
- Zustand API 简洁,store 可以按业务拆分,适合中小型客户端状态和较低样板代码场景。
- Jotai 以 atom 为状态单元,适合细粒度状态组合,组件只订阅自己使用的 atom。
- MobX 基于 observable 响应式模型,写法接近直接修改对象,但需要理解依赖追踪边界。
- 选择状态库时要先区分服务端状态、本地 UI 状态和跨页面业务状态,不要为了请求缓存引入客户端状态库。
题目解析
这道题不是让背库 API,而是比较状态模型和团队约束。
Redux 的优势是可预测和生态,成本是样板和概念较多;Zustand 的优势是简单,成本是约束较少。
Jotai 更强调组合和细粒度订阅,MobX 更强调响应式对象和较少手动更新样板。
代码示例
下面用 Zustand 表示一个轻量用户偏好 store。
TSX
type PreferenceState = {
theme: 'light' | 'dark'
setTheme: (theme: 'light' | 'dark') => void
}
const usePreferenceStore = create<PreferenceState>(set => ({
theme: 'light',
setTheme: theme => set({ theme })
}))
function ThemeSwitch() {
const theme = usePreferenceStore(state => state.theme)
const setTheme = usePreferenceStore(state => state.setTheme)
return <button onClick={() => setTheme(theme === 'light' ? 'dark' : 'light')}>{theme}</button>
}常见误区
- 没有区分服务端状态和客户端状态,用 Redux 或 Zustand 管所有接口缓存。
- 只按流行度选库,不看团队调试、约束、类型和可维护性需求。
- 把所有状态放进一个巨大 store,导致模块边界和更新影响范围变模糊。