Zustand vs Jotai 对比

极简的基于 store 的状态管理,打包体积约 1KB

VS
Jotai

原子化状态管理,Recoil 的进化版本

8 分钟阅读Frontend

评分对比

图表加载中…

详细评分

详细评分: Zustand Jotai ——按类别打分,满分 10 分
分类ZustandJotai
性能
10/10
9/10
学习难易度
10/10
7/10
生态系统
9/10
8/10
社区
9/10
8/10
就业市场
8/10
6/10
面向未来
9/10
9/10

优缺点

Zustand

优点

  • 打包体积约 1KB——业内最小
  • 基于 Hook 的 API——上手容易
  • 无需 Provider 包裹——独立 store
  • 内置 persist 中间件(localStorage)
  • 兼容 Redux DevTools
  • 一流的 TypeScript 支持
  • 样板代码极少
  • 作者 Daishi Kato 备受推崇

缺点

  • store 是全局的——逻辑拆分需要手动处理
  • 响应式依赖的粒度不够精细
  • 实现类似 Jotai 的派生状态较为困难
  • 在大型应用中需要自行摸索规范模式

最适合

中小型 React 应用从 Redux 迁移(更简单的替代方案)偏好单一 store 心智模型的场景对性能要求较高的场景(打包体积极小)快速原型开发

Jotai

优点

  • 基于 atom——响应粒度更细
  • 派生 atom——计算状态的处理方式更自然
  • 原生集成 Suspense
  • 支持异步 atom(Promise)
  • 支持作用域(多个上下文)
  • 优秀的 TypeScript 支持
  • 作者 Daishi Kato(与 Zustand 同一作者)
  • 兼容 React 19 并发特性

缺点

  • atom 心智模型存在一定学习曲线
  • 打包体积大于 Zustand(约 5KB)
  • DevTools 成熟度较低
  • 架构决策相对复杂

最适合

复杂的派生状态场景需要细粒度组件更新大量使用 Suspense 的应用偏好函数式编程的开发者从 Recoil 迁移的用户

代码对比

Zustand
import { create } from 'zustand';

const useUserStore = create((set) => ({
    user: null,
    fetchUser: async (id) => {
        const user = await api.getUser(id);
        set({ user });
    }
}));

// Usage
function Profile() {
    const { user, fetchUser } = useUserStore();
    return <div>{user?.name}</div>;
}
Jotai
import { atom, useAtom } from 'jotai';

const userAtom = atom<User | null>(null);
const userNameAtom = atom((get) => get(userAtom)?.name ?? "Guest");

function Profile() {
    const [user] = useAtom(userAtom);
    const [name] = useAtom(userNameAtom);  // Derived, fine-grained
    return <div>{name}</div>;
}

结论

追求简单的全局状态与极简 API → 选择 Zustand。需要细粒度的派生状态、Suspense 支持及复杂场景 → 选择 Jotai。两者出自同一作者,定位互补。80% 的使用场景 Zustand 已经足够,Jotai 则在派生状态等细分场景中大放异彩。

获取免费咨询
常见问题

常见问题

企业级项目中 Redux 生态已根深蒂固——遗留项目可以继续使用。新项目默认建议选择 Zustand 或 Jotai。

相关博客文章

查看全部文章

相关项目

查看全部项目
全部对比