React最小状态管理Jotai

Jotai 状态管理

1. 简介

Jotai 是一个基于原子 atom 概念的 React 状态管理库,它提供了简单且灵活的方式来管理应用状态, 而且非常轻量, 大厂用的非常多。

Jotai Redux
适合单个页面,多次用到的属性 适合全局公共属性
超级轻量(与useState 用法相同) 需要更多的配置和中间件来处理复杂的场景

3. 使用 (非常简单)

3.1 示例代码结构
复制代码
src/
├── components/
│          └── Comp1.tsx        # 组件1
│	       └── Comp2.tsx        # 组件2
├─── config.ts                  # Jotai 配置
├─── index.tsx                  # 页面
3.2 创建原子状态

首先,我们需要创建一个原子状态。在示例中,我们创建了一个 countAtom: => config.ts

javascript 复制代码
// config.ts
import { atom } from 'jotai';

export const countAtom = atom(0); // 创建一个初始值为 0 的原子状态
javascript 复制代码
import { countAtom } from "./config";
import { useAtom } from "jotai";
// ... Comp1,Comp2

function Page() {
  const [count, setCount] = useAtom(countAtom);
  return (
    <>
     <div> {count} </div>
     <Comp1 />
     <Comp2 />
    </>
  );
}
3.3 使用原子状态

在组件中使用 Jotai 的原子状态非常简单,只需要使用 useAtom hook: => Comp1.tsx

javascript 复制代码
import { useAtom } from "jotai";
import { countAtom } from "./config";

function Comp1() {
  const [count, setCount] = useAtom(countAtom);
  return (
    <div onClick={() => setCount(count + 1)}>
      {count}
    </div>
  );
}
  • 也可以通过 useAtomValue, useSetAtom 获取和修改共享的属性值: => Comp2.tsx
javascript 复制代码
import { countAtom } from "./config";
import { useAtomValue, useSetAtom } from "jotai";

function Comp2() {
  const count = useAtomValue(countAtom);
  const setCount = useSetAtom(countAtom);
  return (
    <>
      <div>{count}</div>
      <div onClick={() => setCount(999)}>设置999</div>
    </>
  );
}

4. Jotai 的优势

  1. 简单直观:使用方式类似于 React 的 useState
  2. 原子化状态:可以将状态分割成小的原子单元
  3. TypeScript 支持:提供完整的类型推断
  4. 性能优化:只重渲染使用到特定原子状态的组件

5. 总结

  • Jotai 提供了一种简单且高效的方式来管理 React 应用的状态。通过原子化的状态管理,我们可以更好地组织和维护应用的状态逻辑,同时保持代码的简洁和可维护性。
  • 在实际应用中,我们可以根据需要结合使用 Jotai 的全局状态管理和 React 的本地状态管理,以达到最佳的开发体验和应用性能。
相关推荐
DsirNg16 小时前
页面栈溢出问题修复总结
前端·微信小程序
小徐_233316 小时前
uni-app 也能远程调试?使用 PageSpy 打开调试的新大门!
前端·微信小程序·uni-app
大怪v16 小时前
【Virtual World 03】上帝之手
前端·javascript
别叫我->学废了->lol在线等18 小时前
演示 hasattr 和 ** 解包操作符
开发语言·前端·python
霍夫曼18 小时前
UTC时间与本地时间转换问题
java·linux·服务器·前端·javascript
DARLING Zero two♡18 小时前
浏览器里跑 AI 语音转写?Whisper Web + cpolar让本地服务跑遍全网
前端·人工智能·whisper
Lovely Ruby19 小时前
前端er Go-Frame 的学习笔记:实现 to-do 功能(三),用 docker 封装成镜像,并且同时启动前后端数据库服务
前端·学习·golang
深红19 小时前
玩转小程序AR-实战篇
前端·微信小程序·webvr
银空飞羽19 小时前
让Trae SOLO全自主学习开发近期爆出的React RCE漏洞靶场并自主利用验证(CVE-2025-55182)
前端·人工智能·安全
钮钴禄·爱因斯晨19 小时前
DevUI 组件生态与 MateChat 智能应用:企业级前端智能化实战
前端