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 的本地状态管理,以达到最佳的开发体验和应用性能。
相关推荐
To_OC7 小时前
别再串行写 await 了,Promise.all 才是并行请求的正确打开方式
前端·javascript·promise
vipbic7 小时前
中后台越做越乱后,我用插件化把它救回来了
前端·vue.js
Hyyy7 小时前
Computer Use 适合做什么,不适合做什么——一次真实使用后的思考
前端
小和尚同志8 小时前
前端 AI 单元测试思考与落地
前端·人工智能·aigc
invicinble9 小时前
c端系统,其实更像一个信息展示平台
前端
李姆斯10 小时前
管理是否可以被完全量化
前端·产品经理·团队管理
名字还没想好☜10 小时前
Next.js 中间件实战:鉴权、重定向与 A/B 分流
开发语言·前端·javascript·中间件·react·next.js
广州灵眸科技有限公司11 小时前
瑞芯微RV1126B开发板(EASY-EAI-PI2) INI文件操作
java·前端·javascript·网络·人工智能
kaiking_g11 小时前
vue项目中,静态导入 vs 动态导入 详解
前端·javascript·vue.js
江华森11 小时前
Web 开发基础:HTTP 与 REST
前端·网络协议·http