标准答案

  1. Redux 使用单向数据流、action、reducer 和不可变更新,适合复杂协作、调试和约束强的团队。
  2. Zustand API 简洁,store 可以按业务拆分,适合中小型客户端状态和较低样板代码场景。
  3. Jotai 以 atom 为状态单元,适合细粒度状态组合,组件只订阅自己使用的 atom。
  4. MobX 基于 observable 响应式模型,写法接近直接修改对象,但需要理解依赖追踪边界。
  5. 选择状态库时要先区分服务端状态、本地 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,导致模块边界和更新影响范围变模糊。

作者信息