快速使用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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/424309.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

测试工程师学历路径:从功能测试到测试开发

现在软件从业者越来越多&#xff0c;测试工程师的职位也几近饱和&#xff0c;想要获得竞争力还是要保持持续学习。基本学习路径可以从功能测试-自动化测试-测试开发工程师的路子来走。 功能测试工程师&#xff1a; 1、软件测试基本概念&#xff1a; 学习软件测试的定义、目的…

微信小程序开发——比较两个数字大小

在这里我们使用的工具是 需要自行安装和配置。 在微信小程序中比较两个数字大小有以下几种方式&#xff1a; 一、普通条件判断 在小程序的.js 文件中&#xff0c;先定义两个数字&#xff0c;如let num1 5; let num2 3;。通过if - else if - else语句&#xff0c;根据num1与…

【测试报告】博客系统

1.项目背景 在互联网高度发达的今天,越来越多的人开始学习编程,诞生了越来越多的程序员,但他们没有可以互相交流学习、分享经验的平台。本项目旨在为更多的程序员以及新手小白提供一个能够促进学习、共同进步&#xff0c;让小白也能成为大神的交流学习平台 1.1测试目标以及测试…

【数据结构】8——图3,十字链表,邻接多重表

数据结构8——图3&#xff0c;十字链表&#xff0c;邻接多重表 文章目录 数据结构8——图3&#xff0c;十字链表&#xff0c;邻接多重表前言一、十字链表结构例子 复杂例子 二、邻接多重表&#xff08;Adjacency Multilist&#xff09;例子 前言 除了之前的邻接矩阵和邻接表 …

Vue 第三方调用若依系统实现系统单点登录

应用场景 甲方现有平台系统拟集成我方新开发系统&#xff0c;实现单点登录功能&#xff0c;即用户登录主平台后&#xff0c;无需重复登录即可无缝访问新系统&#xff0c;提升用户体验与操作效率。 解决方案 实现代码 前端 Step:1 新建ssoLogin.vue页面 <template><d…

视觉SLAM ch5——相机与图像

一、单目模型 前言&#xff1a;本大标题下1~4部分讲述的都是单目针孔相机 SLAM的数学本质可以抽象为运动方程&#xff08;x&#xff09;和观测方程&#xff08;z&#xff09;&#xff08;书上的第二部分&#xff09; 教材第二章截图 书中P24页截图 其中的未知量为xk&#xff…

TiDB从0到1学习笔记(精华篇)

历时四个月&#xff0c;恭喜赵老师的《TiDB从0到1》 系列文章顺利完结&#xff0c;小编再次梳理一遍文稿&#xff0c;并附注解分享给大家。 整体架构 从 TiDB 1.0 到 8.0&#xff0c;TiDB 的体系结构一直在不断演进。接下来让我们一起看看整体架构的变化。 TiDB v1 TiDB v1&…

通过C# 裁剪PDF页面

在处理PDF文档时&#xff0c;有时需要精确地裁剪页面以适应特定需求&#xff0c;比如去除广告、背景信息或者仅仅是为了简化文档内容。 本文将指导如何使用免费.NET控件通过C#实现裁剪PDF页面。 免费库 Free Spire.PDF for .NET 支持在 .NET (C#, VB.NET, ASP.NET, .NET Core)…

AI 加持的云端 IDE——三种方法高效开发前后端聊天交互功能

以下是「豆包 MarsCode 体验官」优秀文章&#xff0c;作者努力的小雨。 豆包 MarsCode 豆包MarsCode 编程助手支持的 IDE: 支持 Visual Studio Code 1.67.0 及以上版本&#xff0c;以及 JetBrains 系列 IDE&#xff0c;如 IntelliJ IDEA、Pycharm 等&#xff0c;版本要求为 22…

告别繁琐粘贴,CleanClip Mac 版,让复制粘贴变得简单快捷!粘贴队列功能太强大了!

告别繁琐粘贴&#xff0c;CleanClip Mac 版&#xff0c;让复制粘贴变得简单快捷&#xff01; CleanClip for Mac &#x1f4cb; 是一款专为Mac用户设计的高效剪贴板管理工具。它解决了传统复制粘贴过程中的繁琐问题&#xff0c;让你的工作流程更加顺畅和高效。 &#x1f504;…

jenkins流水线+k8s部署springcloud微服务架构项目

文章目录 1.k8s安装2.jenkins安装3.k8s重要知识1.简介2.核心概念3.重要命令1.查看集群消息2.命名空间3.资源创建/更新4.资源查看5.描述某个资源的详细信息6.资源编辑7.资源删除8.资源重启9.查看资源日志10.资源标签 4.k8s控制台1.登录2.界面基本操作1.选择命名空间2.查看命名空…

一些写leetcode的笔记

标准库中的string类没有实现像C#和Java中string类的split函数&#xff0c;所以想要分割字符串的时候需要我们自己手动实现。但是有了stringstream类就可以很容易的实现&#xff0c;stringstream默认遇到空格、tab、回车换行会停止字节流输出。 #include <sstream> #incl…

六、二分搜索-算法总结

文章目录 六、二分搜索6.1 简介6.2 典型实例 -- 二分查找6.2 模板6.3 常见题目6.3.1 搜索插入位置6.3.2 搜索二维矩阵6.3.3 寻找旋转排序中数组中的最小值6.3.4 寻找旋转排序数组中的最小值 II6.3.5 搜索旋转排序数组6.3.6 搜索旋转排序数组 II 总结 六、二分搜索 6.1 简介 给…

电学基础概念详解及三相电公式汇总

​​​​​​​ 本文全面介绍了电路的基本组成、电学核心概念以及三相电的常用公式。首先&#xff0c;通过水力学中的现象类比&#xff0c;生动解释了电路中电池、开关、电阻和灯泡等元素的功能&#xff0c;帮助读者更好地理解电压、电流和电阻之间的关系。随后&#xff0c;详…

【笔记】进制转换

文章目录 一、任意进制转十进制1、整数转化成十进制&#xff08;1&#xff09;二进制转十进制&#xff08;2&#xff09;八进制转十进制 2、小数转化成十进制&#xff08;1&#xff09;二进制转十进制&#xff08;2&#xff09;八进制转十进制 3、代码1、整数转化成十进制2、小…

OpenCV-Python笔记(上)

安装 全局安装 pip install opencv-python项目虚拟环境安装 # 进入项目根路径执行 .venv/bin/pip install opencv-python计算机眼中的图像 一张图片由大小比如&#xff08;100*100&#xff09;决定&#xff0c;说明存在100*100的像素点&#xff0c;每个像素点存在颜色通道&…

Neo4j入门案例:西游记

创建一个基于《西游记》中“孙悟空”的黑神话版本的知识图谱。这个图谱将会包括《西游记》中的一些主要角色、地点、事件以及它们之间的关系。我们将创建至少10个节点和20个关系&#xff0c;并提供相应的Cypher语句。 数据模型定义 实体类型&#xff08;节点&#xff09; 角色…

Nuxt Kit 组件管理:注册与自动导入

title: Nuxt Kit 组件管理:注册与自动导入 date: 2024/9/15 updated: 2024/9/15 author: cmdragon excerpt: Nuxt Kit 为组件的注册和导入提供了灵活高效的解决方案。无论你是要批量导入组件,还是单独处理特定组件,这些工具都能够满足你的需求。使用这些方法可以显著提升…

路径规划——D*算法

路径规划——D*算法 D Star算法是一种用于动态环境下的算法&#xff0c;它可以在环境变化时快速更新路径。 算法原理 D Star算法是一种反向增量式搜索算法&#xff0c;反向即算法从目标点开始向起点逐步搜索&#xff1b;增量式搜索&#xff0c;即算法在搜索过程中会计算每一…

Navicat On-Prem Server 2.0 | MySQL与MariaDB基础管理功能正式上云

近日&#xff0c;Navicat 发布了 Navicat On-Prem Server 2.0 的重大版本更新。这标志着这款自2021年首发的私有云团队协作解决方案迈入了一个崭新的阶段。此次2.0版本的飞跃性升级&#xff0c;核心聚焦于MySQL与MariaDB基础管理功能的全面革新与强化&#xff0c;赋予了用户的操…