Jotai

Jotai 是一个原子化的 React 全局状态管理库,与前一章中 Zustand 的一体化状态管理不同,Jotai 所提供的状态更像是 React 中useState提供的细粒度状态,只是不同的是 Jotai 提供的状态超越了useState必须存在于一个组件中的限制,将状态保存在了应用全局。

原子化状态是 Recoil 库率先提出的,这是一个 Facebook 提出的实验性全局状态管理库,这个库的设计理念就是将复杂的状态分解成最小的不可再分的原子状态进行细粒度的管理。这个被分解到最细粒度的状态就被称为atom,每个 atom 可以被多个组件重复订阅和更新,而且更新只会触发依赖于此 atom 的组件的重新渲染。

Jotai 是由基础库和扩展工具库组成,其中基础库可以使用以下方式安装到项目中。

npm install jotai
yarn add jotai

Jotai 的基础库包括了jotai核心库和jotai/utils工具库两个功能库中功能的使用。如果需要使用其他扩展功能,则需要安装其他相应的扩展库。

其他常用的扩展库有以下这些:

  • jotai-trpc,用于支持 Jotai 结合 tRPC 使用。
  • jotai-tanstack-query,用于支持 Jotai 与 TanStack Query 结合使用。
  • jotai-effect,用于对 atom 的状态进行监控,并执行一些副作用功能。
  • jotai-urql,用于支持 Jotai 与 GraphQL 结合使用。
  • jotai-immer,用于支持在 Jotai 中使用不可变数据的功能。
  • jotai-xstate,用于使用 XState 来增强和限制 Jotai 中状态管理功能。
  • jotai-location,用于在 Jotai 中处理与window.location相关的功能。
  • jotai-cache,用于扩展 Jotai 对于一些请求相应结果以及过程数据的缓存能力。
  • jotai-scope,用于扩展 Jotai 对于在组件树中 Provider 使用的限制。
  • jotai-optics,用于在 Jotai 中支持 optics-ts 功能。在使用的时候需要同时安装optics-ts库。
  • jotai-history,用于扩展 Jotai 在管理状态时对于历史状态的管理功能。

这些扩展功能库在日常的使用中并不是非常广泛,故本章将仅选择其中可能比较常用的扩展库来说明,其余的扩展库可以在使用的时候通过相关扩展库的文档和教程来使用。