news 2026/6/23 18:19:18

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/6/6 1:00:21

Windows 11系统优化与性能提升全攻略:从卡顿到流畅的蜕变之路

Windows 11系统优化与性能提升全攻略&#xff1a;从卡顿到流畅的蜕变之路 【免费下载链接】Win11Debloat 一个简单的PowerShell脚本&#xff0c;用于从Windows中移除预装的无用软件&#xff0c;禁用遥测&#xff0c;从Windows搜索中移除Bing&#xff0c;以及执行各种其他更改以…

作者头像 李华
网站建设 2026/6/10 19:50:06

.NET代码保护与程序集安全:开源混淆工具实战指南

.NET代码保护与程序集安全&#xff1a;开源混淆工具实战指南 【免费下载链接】obfuscar Open source obfuscation tool for .NET assemblies 项目地址: https://gitcode.com/gh_mirrors/ob/obfuscar 在当今数字化时代&#xff0c;.NET应用程序面临着日益严峻的安全挑战&…

作者头像 李华
网站建设 2026/6/23 17:26:57

AI智能爬虫实战指南:Scrapegraph-ai从环境部署到数据提取全流程

AI智能爬虫实战指南&#xff1a;Scrapegraph-ai从环境部署到数据提取全流程 【免费下载链接】Scrapegraph-ai Python scraper based on AI 项目地址: https://gitcode.com/GitHub_Trending/sc/Scrapegraph-ai Scrapegraph-ai是一款基于Python的AI智能爬虫框架&#xff0…

作者头像 李华
网站建设 2026/6/19 0:50:41

数字逻辑设计从0到1实战指南:用Digital-Logic-Sim构建实用数字系统

数字逻辑设计从0到1实战指南&#xff1a;用Digital-Logic-Sim构建实用数字系统 【免费下载链接】Digital-Logic-Sim 项目地址: https://gitcode.com/gh_mirrors/di/Digital-Logic-Sim 数字逻辑模拟器是电路设计的强大工具&#xff0c;能够帮助你从基础逻辑门开始&#…

作者头像 李华