news 2026/4/18 7:06:15

Jotai:轻量原子化,React 状态管理的甜心魔法!

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Jotai:轻量原子化,React 状态管理的甜心魔法!

你是否曾被 React 应用中复杂的状态管理所困扰?是不是觉得状态就像一团缠绕不清的毛线,每次修改都小心翼翼,生怕牵一发而动全身?别担心,今天我们要介绍一位来自日本的甜心小天使——Jotai!它以“原子”般轻巧灵活的理念,让你的状态管理变得简单、直观,就像在玩一场可爱的积木游戏!

什么是 Jotai?原子般轻巧的魔法!

Jotai,在日语中意为“原子”,正如其名,它将应用的状态拆解成一个个独立、微小的“原子(atom)”。每个原子都代表着应用中的一小块状态,它们可以独立存在,也可以像乐高积木一样自由组合,构建出复杂而强大的应用状态。这种**原子化(atomic)**的设计思想,让状态管理变得前所未有的清晰和高效。你不再需要面对一个庞大的全局 Store,而是专注于管理一个个小巧玲珑的原子,是不是听起来就很治愈呢?

Jotai 的甜心哲学:简单、灵活、高性能

Jotai 的设计哲学可以用三个词来概括:简单(Simple)灵活(Flexible)高性能(Performant)

  • 简单:Jotai 的 API 非常简洁直观,你只需要掌握几个核心概念,就能轻松上手。它避免了 Redux 等库中繁琐的配置和样板代码,让你的代码更加干净、易读。
  • 灵活:原子之间可以自由组合,形成各种复杂的状态派生。你可以根据业务需求,创建只读原子、可写原子,甚至异步原子,满足各种场景的需求。
  • 高性能:Jotai 只会重新渲染那些真正使用了被更新原子的组件,而不是整个组件树。这意味着你的应用将拥有更快的响应速度和更流畅的用户体验,就像小鸟一样轻盈!

拥抱 TypeScript:类型安全的甜蜜保障

对于 TypeScript 的忠实拥趸来说,Jotai 简直是天作之合!Jotai 对 TypeScript 的支持非常友好,它大量利用了 TypeScript 的**类型推断(type inference)**能力,让你的代码在享受类型安全的同时,依然保持简洁。当然,如果你需要更精确的类型控制,Jotai 也提供了明确的类型定义方式,让你的代码在甜美的同时,也拥有坚实的保障。

Jotai 核心概念:一起玩转小原子!

1.atom():创造你的第一个小原子

atom()是 Jotai 的基石,它用于创建一个原子。你可以给原子一个初始值,就像给你的小宠物起个名字一样。

import{atom}from'jotai';// 创建一个存储计数器值的原子,初始值为0constcountAtom=atom(0);// 创建一个存储用户姓名的原子,初始值为'Guest'constuserNameAtom=atom('Guest');// 创建一个存储布尔值的原子,表示加载状态constisLoadingAtom=atom(false);

2.useAtom():在组件中拥抱原子

useAtom()是一个 React Hook,它允许你在函数组件中读取和更新原子。它会返回一个数组,第一个元素是原子的当前值,第二个元素是更新原子的函数,就像 React 的useState一样,是不是很熟悉呢?

importReactfrom'react';import{atom,useAtom}from'jotai';constcountAtom=atom(0);functionCounter(){const[count,setCount]=useAtom(countAtom);return(<div><p>当前的计数是:{count}</p><button onClick={()=>setCount(c=>c+1)}>加一</button><button onClick={()=>setCount(c=>c-1)}>减一</button></div>);}exportdefaultCounter;

3. 派生原子:聪明的原子会思考!

Jotai 最强大的特性之一就是派生原子(derived atoms)。你可以基于一个或多个现有原子,创建新的原子。这些派生原子会根据它们所依赖的原子自动更新,就像拥有了智慧一样!

派生原子可以是**只读(read-only)的,也可以是可读写(read-write)**的。

只读派生原子

只读派生原子通过一个函数来获取其值,这个函数接收一个get函数作为参数,get函数用于读取其他原子的值。

import{atom,useAtom}from'jotai';constpriceAtom=atom(10);constquantityAtom=atom(2);// 派生一个只读原子,计算总价consttotalAtom=atom((get)=>get(priceAtom)*get(quantityAtom));functionShoppingCart(){const[price]=useAtom(priceAtom);const[quantity]=useAtom(quantityAtom);const[total]=useAtom(totalAtom);return(<div><p>单价:{price}</p><p>数量:{quantity}</p><p>总价:{total}</p></div>);}exportdefaultShoppingCart;
可读写派生原子

可读写派生原子除了读取逻辑外,还包含一个写入逻辑。写入逻辑接收getset函数和更新值作为参数。set函数用于更新其他原子。

import{atom,useAtom}from'jotai';consttextAtom=atom('Hello Jotai!');// 派生一个可读写原子,用于将文本转换为大写constuppercaseTextAtom=atom((get)=>get(textAtom).toUpperCase(),(get,set,newText:string)=>set(textAtom,newText.toLowerCase()));functionTextInput(){const[uppercaseText,setUppercaseText]=useAtom(uppercaseTextAtom);return(<div><input type="text"value={uppercaseText}onChange={(e)=>setUppercaseText(e.target.value)}/><p>原始文本:{textAtom}</p>{/* 注意:这里直接访问textAtom是错误的,应该通过useAtom */}<p>大写文本:{uppercaseText}</p></div>);}exportdefaultTextInput;

小提示:在上面的TextInput组件中,直接访问textAtom是无法获取其最新值的,因为textAtom本身是一个原子定义,而不是其值。正确的方式是像uppercaseTextAtom一样,通过useAtom来获取其值。

Jotai 与 TypeScript 的亲密接触

Jotai 在 TypeScript 环境下表现出色,它能很好地推断原子的类型。让我们看几个例子:

import{atom}from'jotai';// 类型推断为 numberconstnumAtom=atom(123);// 类型推断为 stringconststrAtom=atom('Jotai is cute!');// 显式指定类型constuserAtom=atom<{id:number;name:string}>({id:1,name:'Alice'});// 派生原子的类型推断constdoubledNumAtom=atom((get)=>get(numAtom)*2);// 类型推断为 numberconstgreetingAtom=atom((get)=>`Hello,${get(userAtom).name}!`);// 类型推断为 string

总结:Jotai,你的 React 应用新宠!

Jotai 以其独特的原子化设计、简洁的 API、卓越的性能以及对 TypeScript 的完美支持,成为了 React 状态管理领域的一颗璀璨新星。它让状态管理不再是令人头疼的难题,而是一场充满乐趣的创造之旅。如果你正在寻找一个轻量、灵活、高性能的状态管理方案,那么 Jotai 绝对值得你一试!快来拥抱这个甜心小原子,让你的 React 应用闪闪发光吧!

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

革新Android设备远程控制的秘密:无代码实现跨平台兼容方案

革新Android设备远程控制的秘密&#xff1a;无代码实现跨平台兼容方案 【免费下载链接】android-mcp-server An MCP server that provides control over Android devices via adb 项目地址: https://gitcode.com/gh_mirrors/an/android-mcp-server 在移动开发与测试领域…

作者头像 李华
网站建设 2026/4/3 22:01:48

卡尔曼滤波在无人机导航中的轨迹预测与优化

1. 卡尔曼滤波与无人机导航的完美结合 第一次在无人机项目中使用卡尔曼滤波时&#xff0c;我盯着屏幕上那条原本跳来跳去的轨迹突然变得平滑如丝&#xff0c;那种感觉就像给躁动的无人机装上了"稳定器"。卡尔曼滤波本质上是个"聪明的加权平均器"——它既相…

作者头像 李华
网站建设 2026/4/17 22:01:01

AI辅助数据处理实战指南:无代码工作流效率提升策略

AI辅助数据处理实战指南&#xff1a;无代码工作流效率提升策略 【免费下载链接】Awesome-Dify-Workflow 分享一些好用的 Dify DSL 工作流程&#xff0c;自用、学习两相宜。 Sharing some Dify workflows. 项目地址: https://gitcode.com/GitHub_Trending/aw/Awesome-Dify-Wor…

作者头像 李华
网站建设 2026/4/18 5:44:09

系统优化工具实战:3大步骤+21个实用技巧提升Windows性能

系统优化工具实战&#xff1a;3大步骤21个实用技巧提升Windows性能 【免费下载链接】Win11Debloat 一个简单的PowerShell脚本&#xff0c;用于从Windows中移除预装的无用软件&#xff0c;禁用遥测&#xff0c;从Windows搜索中移除Bing&#xff0c;以及执行各种其他更改以简化和…

作者头像 李华
网站建设 2026/4/17 14:05:37

如何用项目管理工具提升团队效能?StatSVN实践指南

如何用项目管理工具提升团队效能&#xff1f;StatSVN实践指南 【免费下载链接】StatSVN StatSVN is a metrics-analysis tool for charting software evolution through analysis of Subversion source repositories. 项目地址: https://gitcode.com/gh_mirrors/st/StatSVN …

作者头像 李华