jotai

一句话

原子化(atomic)的 React 状态管理库:把状态拆成一个个最小单元 atom,组件只订阅自己用到的 atom,天然细粒度、天然可组合,是 Recoil 思路的轻量化实现(作者也参与过 Recoil)。

核心心智模型

最小示例

import { atom, useAtom } from 'jotai'

const countAtom = atom(0)
const doubledAtom = atom((get) => get(countAtom) * 2)

function Counter() {
  const [count, setCount] = useAtom(countAtom)
  const [doubled] = useAtom(doubledAtom)
  return (
    <button onClick={() => setCount((c) => c + 1)}>
      {count} (doubled: {doubled})
    </button>
  )
}

什么时候选它

什么时候不选它 / 替代方案

场景 更合适的选择
状态是少数几个"大块"(如整个 App 的 store),不需要拆得很细 zustand(单一 store + selector 更直观)
只是父子组件传值,层级不深 直接 props 或 useState
强团队规范、需要 action 审计/时间旅行调试 Redux Toolkit
状态本质是服务端数据缓存 TanStack Query

与 zustand 的对比

jotai zustand
组织方式 自底向上,拆成很多 atom 自顶向下,一个(或几个)集中 store
订阅粒度 天然细粒度(按 atom) 手写 selector 控制粒度
派生状态 声明式、自动依赖追踪 手动在 selector 或 store 里计算
Provider 建议加(隔离/测试),也可不加 不需要
心智负担 状态一多,atom 分散、需要良好组织 store 集中,结构一目了然

一句话选择:状态零散、派生关系复杂 → jotai;状态相对集中、逻辑简单直接 → zustand

优缺点

优点:细粒度订阅、无样板、派生状态声明式好维护、原生支持异步/Suspense、TS 类型推导好。

缺点:atom 一多容易散落各处不好管理(需要自己约定组织方式,比如按 feature 建 atoms 文件);调试时"值在哪里被改的"不如集中 store 直观;生态不如 Redux 成熟。

相关信息