news 2026/4/23 21:48:33

Jotai库

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Jotai库

Jotai 是一个用于 React 的状态管理库,它采用了一种“原子化”的模型,旨在通过简单、灵活的方式管理应用状态。下面我从五个方面,结合具体实践,为你讲解它的核心内容。

1. 它是什么:用积木构建状态的思路

你可以把 Jotai 想象成用乐高积木搭建状态。在 React 中,每个组件有自己的小状态(useState)。而 Jotai 将这种思路扩展到全局:每一块最小的“状态积木”就是一个原子(Atom)

一个原子可以存储任何数据(数字、字符串、对象、数组)。你的整个应用状态,就是由这些独立的原子,或者由它们组合、计算出来的新原子(派生原子)所构成的。这与把全部家当放进一个大箱子(如 Redux 的单一 Store)不同,Jotai 让你可以自由地组合和拆分这些小箱子。

2. 它能做什么:解决状态共享与衍生问题

Jotai 的核心作用是管理 React 组件之间需要共享和衍生的状态。它主要解决以下问题:

  • 跨组件状态共享:让多个分散的组件能轻松读写同一份数据,无需层层传递属性(Props)。

  • 自动计算衍生状态:当一个状态依赖于另一个或多个状态时,可以自动、高效地同步更新。例如,一个“在线好友列表”原子可以自动从“所有好友”原子中过滤生成。

  • 优化渲染性能:得益于原子化的设计,当某个原子更新时,只通知真正依赖它的组件重新渲染,避免了 Context 可能带来的不必要的全局重渲染问题。

  • 支持异步操作:原子可以直接包含异步逻辑(如数据请求),并能够与 React 的Suspense无缝集成。

3. 怎么使用:从定义到消费的三步

使用 Jotai 通常遵循创建、提供、消费三个步骤。其核心 API 非常精简,学习成本较低。

第一步:安装与项目设置

bash

npm install jotai # 或使用 yarn/pnpm

在应用根组件,通常需要用Provider包裹,以提供状态作用域。

jsx

import { Provider } from 'jotai'; function App() { return ( <Provider> <MyComponent /> </Provider> ); }

第二步:创建与使用原子
下面通过一个计数器示例,展示原子的核心用法:

原子类型代码示例说明
基础原子const countAtom = atom(0);创建存储数字的基础原子。
派生原子(只读)const doubledAtom = atom((get) => get(countAtom) * 2);通过get函数依赖其他原子,自动计算衍生值。
派生原子(可写)const decrementAtom = atom(<br> (get) => get(countAtom), // 读<br> (get, set) => { // 写<br> set(countAtom, get(countAtom) - 1);<br> }<br>);同时提供读写函数,可在此更新其他原子。
组件内使用const [count, setCount] = useAtom(countAtom);使用方式与useState几乎一致。

第三步:优化消费模式
为了进一步提升性能,Jotai 提供了更细粒度的 Hook,可以按需使用:

  • useAtomValue(atom):仅订阅原子的值,用于只读场景。

  • useSetAtom(atom):仅获取更新函数,用于只写场景,组件不会因原子值变化而重渲染。

4. 最佳实践:让应用更健壮

在真实项目中,遵循一些模式可以让状态管理更清晰、高效。

  • 保持原子细粒度:就像用一个个小盒子分类收纳,而不是一个大杂物箱。将逻辑上独立的状态拆分为不同的原子(如userAtomthemeAtom),有利于复用和性能优化。

  • 封装复杂逻辑于派生原子:将涉及多个状态的计算、过滤、组合逻辑封装到派生原子中。这样组件只需关心结果,实现了关注点分离。

  • 使用工具函数处理常见需求jotai/utils包提供了处理常见需求的原子,能简化开发:

    • atomWithStorage:轻松实现状态在localStoragesessionStorage中的持久化。

    • atomFamily:管理动态按参数区分的原子组,例如为每个用户ID创建独立的原子。

    • selectAtom/focusAtom:当原子存储一个较大对象时,允许组件只订阅或修改对象的特定部分,避免不必要的渲染。

  • 合理划分 Provider 作用域:通过在应用不同层级嵌套Provider,可以创建独立的状态作用域。这在微前端、模块化应用或需要状态隔离的场景中非常有用,且卸载Provider时其下的所有原子状态会自动重置。

5. 和同类技术对比:如何选择

选择状态管理库时,需考虑团队习惯和项目需求。下表对比了 Jotai 与几个主流方案:

特性JotaiRedux ToolkitZustandRecoil
设计模型原子模型(自底向上组合)单一Store(集中式, 分片)单一Store(集中式)原子模型(类似 Jotai)
API风格Hooks风格,类似useState分片 (Slice) + ActionStore Hook, 直接定义状态和更新函数Hooks + Selector
学习曲线平缓(核心API极简)较陡(概念较多,如action/reducer/middleware)平缓(API直观)中等 (概念与 Jotai 类似,但有字符串key等差异)
性能优化自动优化(依赖追踪,更新精确)需手动优化(如shallowEqual)自动优化(选择性订阅)自动优化
典型适用场景1. 替代useState + Context
2. 需要细粒度响应式更新
3. 需要良好代码分割
1. 大型、复杂应用,需要强流程约束和可预测性
2. 重度依赖中间件生态
1. 需要轻量、简单的全局Store
2. 需要集成Redux DevTools
与 Jotai 场景高度重叠,但该库已归档,社区活跃度降低

总而言之,Jotai 凭借其原子化、低样板代码和符合直觉的 Hooks API 设计,非常适合用于构建现代化 React 应用。它在性能开发体验灵活性之间取得了良好平衡。

在实际项目中,如果想深入了解特定场景(如与 Next.js 深度集成、处理极其复杂的状态流),可以随时提出更具体的问题。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 16:03:40

架构师的核心思维模型:从技术执行者到系统构建者的蜕变指南

架构师的核心思维模型&#xff1a;从技术执行者到系统构建者的蜕变指南 作为从程序员成长起来的架构师&#xff0c;最惊心动魄的瞬间不是写出完美的算法&#xff0c;而是意识到&#xff1a;架构的本质不是为了解决技术问题&#xff0c;而是为了在约束条件下解决业务问题。 一、…

作者头像 李华
网站建设 2026/4/23 14:32:00

实践指南:ADR——轻量级架构决策记录机制

实践指南&#xff1a;ADR——轻量级架构决策记录机制 在快速迭代的软件开发中&#xff0c;架构不是“设计出来”的&#xff0c;而是“演化出来”的。架构决策记录 (Architecture Decision Record, ADR) 是一种将这些演化过程文档化的轻量级实践&#xff0c;它记录了某个决策及其…

作者头像 李华
网站建设 2026/4/23 6:05:23

SpringBoot配置终极指南:从入门到精通

这是一份非常详细、实用、通俗易懂&#xff0c;权威、全面的Spring Boot配置文件全面指南&#xff0c;包含了从基础到高级的各个方面&#xff0c;并附有可直接运行的代码示例。Spring Boot配置文件全面指南目录Spring Boot配置文件概述1.1 配置文件的作用与重要性1.2 配置文件的…

作者头像 李华
网站建设 2026/4/23 14:31:25

基于SpringBoot+Vue的求职招聘平台设计与实现

前言 &#x1f31e;博主介绍&#xff1a;✌CSDN特邀作者、全栈领域优质创作者、10年IT从业经验、码云/掘金/知乎/B站/华为云/阿里云等平台优质作者、专注于Java、小程序/APP、python、大数据等技术领域和毕业项目实战&#xff0c;以及程序定制化开发、文档编写、答疑辅导等。✌…

作者头像 李华
网站建设 2026/4/23 13:09:16

解码CAN总线

CAN总线概述 CAN总线&#xff08;Controller Area Network&#xff0c;控制器局域网络&#xff09;是多主控、串行通信的总线标准&#xff0c;由德国博世&#xff08;Bosch&#xff09;公司于1980年代为汽车电子系统研发&#xff0c;初衷是解决汽车内部各控制单元&#xff08;发…

作者头像 李华
网站建设 2026/4/23 14:07:54

AI原生应用必看:用户意图理解的常见误区与解决方案

AI原生应用必看&#xff1a;用户意图理解的常见误区与解决方案 关键词&#xff1a;AI原生应用、用户意图理解、常见误区、解决方案、自然语言处理 摘要&#xff1a;本文聚焦于AI原生应用中用户意图理解这一关键问题。首先介绍了文章的背景&#xff0c;包括目的、预期读者等。接…

作者头像 李华