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

快速使用react 全局状态管理工具--redux

redux

Redux 是 JavaScript 应用中管理应用状态的工具,特别适用于复杂的、需要共享状态的中大型应用。Redux 的核心思想是将应用的所有状态存储在一个单一的、不可变的状态树(state tree)中,状态只能通过触发特定的 action 来更新。

官方文档 https://cn.redux.js.org/tutorials/typescript-quick-start

如果对react 不了解 可以看我其他文章
React 核心语法

1. 核心概念

在开始之前,先了解几个 Redux 的核心概念:

  • Store:存储应用的全局状态,应用中只能有一个 store。
  • Action:描述发生了什么事情,通常是一个包含 typepayload 的对象。 修改的函数
  • Reducer:纯函数,接收当前的 state 和 action,返回一个新的 state。主要定义全局修改的函数
  • Dispatch:发送 action 到 reducer 以触发状态的变化。(和vuex差不多)
  • Middleware:拦截 action,可以用于异步操作(如 redux-thunk)或日志记录。

2. 安装 Redux 和相关工具

你可以使用 npm 或 yarn 来安装 Redux 和 react-redux(React 的绑定库),以及 Redux DevTools 用于调试:

npm install redux react-redux @reduxjs/toolkit

或者:

yarn add redux react-redux @reduxjs/toolkit

@reduxjs/toolkit 是 Redux 官方推荐的简化工具包,用于减少 Redux 样板代码,并提供了一些优化的功能。

3. Redux 使用示例

3.1 定义一个 Redux Store

Redux Store 是整个应用状态的存储中心。我们可以使用 configureStore 来创建 Redux store。

也就是pinia 模块化中的index

index.ts

import { configureStore } from '@reduxjs/toolkit';const store = configureStore({//进行模块导入reducer: {// 你的 reducers}
});export default store;
3.2 创建 Slice(使用 Redux Toolkit)

createSlice 是 Redux Toolkit 中的一个 API,能够简化 action 和 reducer 的编写。

在counter 目录下新建 counterStore.ts 或者tsx都可以

import { createSlice } from '@reduxjs/toolkit';// 定义一个 counter 的 slice
const counterStore = createSlice({name: 'counter', // slice 的进行多环境时候隔离的名称initialState: { count: 0 }, // 初始状态reducers: {// 定义 reducer 方法increment: (state) => {state.count += 1; // 直接修改 state},decrement: (state) => {state.count -= 1;},reset: (state) => {state.count = 0;}}
});// 导出 actions 交给具体组件使用
export const { increment, decrement, reset } = counterStore.actions;// 导出 reducer,供 store index.ts  注册 使用
export default counterStore.reducer;
3.3 将 Slice 合并到 Store

counterSlice.reducer 添加到 Redux store 中。

index.ts 此时完成注册 返回注册的配置的store对象

import { configureStore } from '@reduxjs/toolkit';
import counterReducer from './counterSlice';const store = configureStore({reducer: {counter: counterReducer, // 将 counterReducer 添加到 store 中}
});export default store;
3.4 在 React 中使用 Redux

现在,你可以使用 react-redux 提供的 Provider 组件将 store 注入到 React 组件中。

挂载react 组件数 ,让store范围内的组件 都可以使用 (感觉就像hook中的useContext pro max 版本)

main.tsx

/*** <StrictMode> 是 React 提供的一个开发工具,用于帮助检测应用程序中的潜在问题。它主要用于在开发模式下运行时,对组件进行额外的检查和警告。<StrictMode> 不会在生产环境中影响应用程序的性能。** <StrictMode> 的主要功能包括:* 识别不安全的生命周期方法:在 React 16.3 之后,一些生命周期方法被标记为不安全,<StrictMode> 可以帮助你识别这些方法的使用。* 检测过时的字符串 ref API:<StrictMode> 会警告你使用过时的字符串 ref API,建议使用函数或 createRef API。* 检测意外的副作用:<StrictMode> 会帮助你检测组件中可能存在的副作用,例如在渲染过程中修改状态或执行其他副作用操作。* 检测遗留的 context API:<StrictMode> 会警告你使用过时的 context API,建议使用新的 context API。*///3.添加到组件树
createRoot(document.getElementById('root')!).render(<StrictMode><Provider store={store}><App /></Provider></StrictMode>,)
3.5 在组件中访问 Redux 状态

为了在 React 组件中访问 Redux 状态,我们可以使用 useSelectoruseDispatch 钩子。

  • useSelector: 从 Redux store 中获取选择哪个模块的状态。
  • useDispatch: 用于 dispatch 一个 action,触发状态更新。

新建一个demo 演示组件


import { useSelector, useDispatch } from 'react-redux';
// 导出需要使用的函数
import { increment, decrement, reset } from '../../store/counter/conterStoreUSER.tsx';function Counter() {// 使用 useSelector  选择需要的全局存储模块  获取模块当前状态 const count = useSelector((state) => state.counter.count);// 使用 useDispatch 获取 dispatch 函数 用于传递执行的actionconst dispatch = useDispatch();return (<div><h1>全局技术器Counter: {count}</h1><button onClick={() => dispatch(increment())}>Increment</button><button onClick={() => dispatch(decrement())}>Decrement</button><button onClick={() => dispatch(reset())}>Reset</button><Son></Son></div>);
}
//演示深层 组件也可以获取到全局状态
function Son() {const count = useSelector((state) => state.counter.count);return (<div><h1>层级别省的也可以拿到数据Counter: {count}</h1></div>);
}export default Counter;

main.tsx

import { StrictMode } from 'react'
import { createRoot } from 'react-dom/client'
// import App from './AppUSER.tsx'
import Counter from './page/test/demo1USER.tsx'
import './index.css'
import store from "./store";
import {Provider} from "react-redux";createRoot(document.getElementById('root')!).render(<StrictMode><Provider store={store}>{/*<App />*/}<Counter /></Provider></StrictMode>,)

演示成功,此时就已经可以成功使用redux 全局状态管理的功能了,还是相当简单的

目录结构
在这里插入图片描述

效果

在这里插入图片描述

3.6 使用 Redux DevTools 调试

Redux DevTools 是调试 Redux 状态变化的强大工具,默认情况下与 Redux Toolkit 兼容。

打开浏览器的 Redux DevTools 即可查看 Redux 状态的变化。

4. 优缺点

  • 优点

    • 全局状态管理,适用于复杂的大型应用。
    • 状态不可变,调试方便,状态变化容易追踪。
    • Redux DevTools 支持时间旅行等调试功能。
  • 缺点

    • 开发小型应用时可能过于复杂,增加不必要的样板代码。
  • 需要理解 actions、reducers 等概念,有一定的学习曲线。

5.其他功能

核心功能就上面 kiit 工具包用后很简单
其他功能可以看官方文档
https://cn.redux.js.org/introduction/why-rtk-is-redux-today

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 红队打点的思路与信息收集
  • 2025秋招LLM大模型多模态面试题(六)-KV缓存
  • Spring 源码解读:实现自定义注解处理器
  • Leetcode 和为 K 的子数组
  • 【面向对象】设计模式分类
  • arm和riscv系统调用对比(笔记)
  • 线程调优——调整线程池参数提升程序执行效率
  • git-fork操作指南
  • Linux6-vi/vim
  • Snowflake的“AI + 数据” 模式,如何颠覆传统数据处理!
  • 掌握 Flutter 中的 `Overlay` 和 `OverlayEntry`:弹窗管理的艺术
  • 大数据Flink(一百二十二):阿里云Flink MySQL连接器介绍
  • 前端在网络安全攻击问题上能做什么?
  • 计算机四级-计算机网络
  • JIT(即时编译)技术
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • 11111111
  • angular学习第一篇-----环境搭建
  • codis proxy处理流程
  • ES6系列(二)变量的解构赋值
  • Java小白进阶笔记(3)-初级面向对象
  • Spark in action on Kubernetes - Playground搭建与架构浅析
  • TCP拥塞控制
  • Vue实战(四)登录/注册页的实现
  • 得到一个数组中任意X个元素的所有组合 即C(n,m)
  • 和 || 运算
  • 前端技术周刊 2018-12-10:前端自动化测试
  • 前端每日实战 2018 年 7 月份项目汇总(共 29 个项目)
  • 如何借助 NoSQL 提高 JPA 应用性能
  • 十年未变!安全,谁之责?(下)
  • 为物联网而生:高性能时间序列数据库HiTSDB商业化首发!
  • 职业生涯 一个六年开发经验的女程序员的心声。
  • 哈罗单车融资几十亿元,蚂蚁金服与春华资本加持 ...
  • ​520就是要宠粉,你的心头书我买单
  • ​十个常见的 Python 脚本 (详细介绍 + 代码举例)
  • #《AI中文版》V3 第 1 章 概述
  • (16)UiBot:智能化软件机器人(以头歌抓取课程数据为例)
  • (2015)JS ES6 必知的十个 特性
  • (24)(24.1) FPV和仿真的机载OSD(三)
  • (C语言)二分查找 超详细
  • (js)循环条件满足时终止循环
  • (vue)el-checkbox 实现展示区分 label 和 value(展示值与选中获取值需不同)
  • (Windows环境)FFMPEG编译,包含编译x264以及x265
  • (黑马点评)二、短信登录功能实现
  • (未解决)jmeter报错之“请在微信客户端打开链接”
  • (转载)hibernate缓存
  • .net core 控制台应用程序读取配置文件app.config
  • .NET gRPC 和RESTful简单对比
  • .NET/C# 避免调试器不小心提前计算本应延迟计算的值
  • /etc/motd and /etc/issue
  • @JoinTable会自动删除关联表的数据
  • [ C++ ] STL---仿函数与priority_queue
  • [ CTF ] WriteUp-2022年春秋杯网络安全联赛-冬季赛
  • [ArcPy百科]第三节: Geometry信息中的空间参考解析
  • [AutoSar]BSW_Com02 PDU详解