React的状态管理——Redux

server/2025/3/26 1:19:40/

Redux与计数器

  • 配套工具
  • 使用React Toolkit 创建 counterStore
  • 为React注入store
  • React组件使用store中的数据
  • React组件修改store中的数据
  • 绑定用户交互
  • 效果展示
  • action传参
  • Redux异步状态管理

  • React中的Redux就像Vue中的Vuex和Pinia一样,都是状态管理工具,通过这种方式可以很方便的实现各个组件中的通信。
  • 下面的代码是通过Redux实现一个计数器

配套工具

  • 在React中使用Redux,官方要求安装两个插件:Redux Toolkitreact-redux

使用React Toolkit 创建 counterStore

import { createSlice } from "@reduxjs/toolkit";const counterStore = createSlice({//name属性不可少,否则会报错name:'counter',//初始化stateinitialState:{count:0},//修改状态的方法 可以直接修改reducers:{//点击加号increment(state){state.count++},//点击减号decrement(state){state.count--}}
})
//解构函数
const {increment,decrement} = counterStore.actions
//获取reducer
const reducer = counterStore.reducer
//按需导出函数
export {increment,decrement}
//默认导出方式导出reducer
export default reducer

为React注入store

  • react-redux负责把Redux和React连接起来,内置Provider组件通过store参数把创建好的store实例注入到应用中,连接正式建立
import React from 'react';
import ReactDOM from 'react-dom/client';
import App from './App';
import store from './store';
import { Provider } from 'react-redux';//把APP根组件渲染到id位root的dom节点上
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(<React.StrictMode><Provider store={store}><App /></Provider></React.StrictMode>
);

React组件使用store中的数据

  • 在React组件中使用store中的数据,需要用到一个钩子函数useSelector,它的作用是把store中的数据映射到组件中
    const {count} = useSelector(state=>state.counter)

React组件修改store中的数据

  • React组件中修改store中的数据需要借助另外一个hook函数 - useDispatch,它的作用是生成提交action对象的dispatch函数
    action传参
  • 在reducers的同步修改方法中添加action对象参数,在调用actionCreater的时候传递参数,参数会被传递到action对象payload属性上
    Redux异步状态管理
  • 步骤:
    • 创建store的写法保持不变,配置好同步修改状态的方法
    • 单独封装一个函数,在函数内部return一个新函数,在新函数中:
      • 封装异步请求获取数据
      • 调用同步actionCreater传入异步数据生成一个action对象,并使用dispatch提交
    • 组件中dispatch的写法保持不变

绑定用户交互

  • 获取状态:通过useSelector,组件从Redux store中获取count状态。这里的state.counter假设是store中的一个对象,其中包含count属性。
  • 获取dispatch函数:通过useDispatch,组件获取到dispatch函数,这个函数用于将action发送到Redux store。
  • 渲染UI:组件渲染两个按钮和当前的count值。点击按钮时,会触发相应的action(increment或decrement),通过dispatch函数发送到Redux store,从而更新状态。
import { useSelector,useDispatch } from "react-redux";
//导入actionCreator
import { increment,decrement,addToNum } from "./store/modules/counterStore";
const App = () => {const {count} = useSelector(state=>state.counter)// const {channelList} = useSelector(state=>state.channel)const dispatch = useDispatch()return (<div><button onClick={()=>dispatch(decrement())}>-</button>{count}<button onClick={()=>dispatch(increment())}>+</button></div>  );
};export default App;

效果展示

在这里插入图片描述

action传参

  • 在reducers的同步修改方法中添加action对象参数,在调用actionCreater的时候传递参数,参数会被传递到action对象payload属性上

Redux异步状态管理

  • 步骤:
    • 创建store的写法保持不变,配置好同步修改状态的方法
    • 单独封装一个函数,在函数内部return一个新函数,在新函数中:
      • 封装异步请求获取数据
      • 调用同步actionCreater传入异步数据生成一个action对象,并使用dispatch提交
    • 组件中dispatch的写法保持不变

http://www.ppmy.cn/server/179108.html

相关文章

django怎么配置404和500

在 Django 中&#xff0c;配置 404 和 500 错误页面需要以下步骤&#xff1a; 1. 创建自定义错误页面模板 首先&#xff0c;创建两个模板文件&#xff0c;分别用于 404 和 500 错误页面。假设你的模板目录是 templates/。 404 页面模板 创建文件 templates/404.html&#x…

论文阅读:2023 arxiv Provable Robust Watermarking for AI-Generated Text

总目录 大模型安全相关研究:https://blog.csdn.net/WhiffeYF/article/details/142132328 Provable Robust Watermarking for AI-Generated Text https://arxiv.org/pdf/2306.17439 https://github.com/XuandongZhao/Unigram-Watermark https://www.doubao.com/chat/211092…

蓝桥杯————封闭图形个数(自定义排序问题)

20分钟&#xff0c;拿捏&#xff01;1.封闭图形个数 - 蓝桥云课 1.数位排序 - 蓝桥云课 思路和数位循环一样&#xff0c;其实 先初始化数组&#xff0c;包含两个数组&#xff0c;一个数组arr用来统计输入的数字 另一个数组num用来统计每个数的封闭图形的个数 static void in…

Qt窗口控件之菜单栏QMenuBar

菜单栏QMenuBar 1. QMenuBar Qt 中的菜单栏是通过 QMenuBar 类型来实现的&#xff0c;一个主控件最多只能有一个菜单栏。一个菜单栏可以添加多个菜单&#xff0c;一个菜单又可以添加多个菜单项。 每个菜单又都是一个 QMenu 类型&#xff0c;每个菜单项都是一个 QAction。 2.…

深入理解 HTML5 Web Workers:提升网页性能的关键技术解析

深入理解 HTML5 Web Workers&#xff1a;提升网页性能的关键技术解析 引言1. 什么是 Web Workers&#xff1f;Web Workers 的特点&#xff1a; 2. Web Workers 的使用方式2.1 创建一个 Web Worker步骤 1&#xff1a;创建 Worker 文件步骤 2&#xff1a;在主线程中调用 Worker 3…

蓝桥杯,冬奥大抽奖

在日常的网页开发中&#xff0c;抽奖功能是一种常见的交互设计&#xff0c;它可以增加用户的参与感和趣味性。今天&#xff0c;我将分享一个简单的抽奖转盘实现&#xff0c;它使用了HTML、CSS和JavaScript&#xff0c;非常适合初学者学习和理解前端开发的基本概念。 一、项目背…

北京交通大学第三届C语言积分赛

作者有言在先&#xff1a; 题解的作用是交流思路&#xff0c;不是抄作业的。可以把重点放在思路分析上而不是代码上&#xff0c;毕竟每个人的代码风格是不一样的&#xff0c;看别人的代码就跟做程序填空题一样。先看明白思路再看代码。 还有就是&#xff0c;deepseek真的很好用…

AI进化论:从图灵测试到智能革命的临界点

智能觉醒的起源密码(1943-2010) 在曼彻斯特维多利亚大学的实验室里,1948年"Baby"计算机完成人类首个存储程序运行实验时,艾伦图灵正在构思《计算机器与智能》。这篇划时代论文提出的"模仿游戏"测试,为人工智能奠定了哲学基础。1956年达特茅斯会议…