当前位置: 首页 > news >正文

React最小状态管理Jotai

Jotai 状态管理

1. 简介

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

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

3. 使用 (非常简单)

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

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

// config.ts
import { atom } from 'jotai';export const countAtom = atom(0); // 创建一个初始值为 0 的原子状态
import { countAtom } from "./config";
import { useAtom } from "jotai";
// ... Comp1,Comp2function Page() {const [count, setCount] = useAtom(countAtom);return (<><div> {count} </div><Comp1 /><Comp2 /></>);
}
3.3 使用原子状态

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

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
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 的本地状态管理,以达到最佳的开发体验和应用性能。
http://www.lryc.cn/news/516211.html

相关文章:

  • 计算机网络 —— 网络编程(TCP)
  • 字玩FontPlayer开发笔记4 性能优化 首屏加载时间优化
  • RabbitMQ案例
  • 智能工厂的设计软件 应用场景的一个例子:为AI聊天工具添加一个知识系统 之13 方案再探之4:特定于领域的模板 之 div模型(完整版)
  • WebRtc02:WebRtc架构、目录结构、运行机制
  • 数据结构复习 (顺序查找,对半查找,斐波那契查找,插值查找,分块查找)
  • el-input输入框需要支持多输入,最后传输给后台的字段值以逗号分割
  • C# 枚举格式字符串
  • 【51单片机-零基础chapter1】
  • 记录:导出功能:接收文件流数据进行导出(vue3)
  • 基于Spring Boot + Vue3实现的在线汽车保养维修预约管理系统源码+文档
  • PHP框架+gatewayworker实现在线1对1聊天--接收消息(7)
  • 18.1、网络安全策略分类 流程 内容
  • 深入理解连接池:从数据库到HTTP的优化之道
  • 【2025最新计算机毕业设计】基于SpringBoot+Vue智慧养老医护系统(高质量源码,提供文档,免费部署到本地)【提供源码+答辩PPT+文档+项目部署】
  • 关于使用vue-cropperjs上传一张图后,再次上传时,裁剪的图片不更新的问题
  • 学习threejs,导入VTK格式的模型
  • 大麦抢票科技狠活
  • PostgreSQL 表达式
  • WPF区域导航+导航参数使用+路由守卫+导航日志
  • Springboot启动报错:Failed to start bean ‘documentationPluginsBootstrapper‘
  • qt-C++笔记之动画框架(Qt Animation Framework)入门
  • C++26 函数契约(Contract)概览
  • Flink CDC 自定义函数处理 SQLServer XML类型数据 映射 doris json字段方案
  • F.interpolate函数
  • 华为交换机---自动备份配置到指定ftp/sftp服务器
  • nginx学习之路-nginx配置https服务器
  • UCAS 24秋网络认证技术 CH10 SSL 复习
  • 【linux内核分析-存储】EXT4源码分析之“文件删除”原理【七万字超长合并版】(源码+关键细节分析)
  • 代码随想录 day62 第十一章 图论part11