笔记二十四、剖析Redux的工作流程

24.1 定义

  • 用做于状态管理的第三方 js 库
  • react框架中使用,也可应用于其他的框架

使用场景

  • 组件间需要共享状态和改变另一个组件的状态
  • 在react项目中可以不使用就尽量不用,复杂场景下才使用

24.2 原理图 

24.3 代码

安装

yarn add @reduxjs/toolkit react-redux

 先上个组织架构图

24.3.1 在程序主入口配置store

main.jsx

import React from 'react'
import ReactDOM from 'react-dom/client'
import App from './App.jsx'
import './index.css'
import {Provider} from "react-redux";
import store from "./store";ReactDOM.createRoot(document.getElementById('root')).render(<React.StrictMode><Provider store={store}><App/></Provider></React.StrictMode>,
)

24.3.2 新建store

store/index.jsx

// store/index.js
import {configureStore} from "@reduxjs/toolkit";
// 引入 reducer 函数
import counterSlice from "./modules/counterSlice";// 使用configureStore创建一个redux仓库
// 并自动配置了 Redux DevTools 扩展 ,这样你就可以在开发时调试 store
export default configureStore({reducer: {// 告诉 store 使用这个 slice reducer 函数来处理对该状态的所有更新counter: counterSlice,},
});

24.3.3 新建某个 reducer

store/modules/counterSlice.js

//modules/counterSlice.js
import {createSlice} from "@reduxjs/toolkit";// 创建react数据切片 利用createSlice()
export const counterSlice = createSlice({// 类似于vuex的命名空间,必须是唯一值// 与pinia的defineStore()的第一个参数一个意思,都是唯一值,做区分name: "counter",// 公共状态initialState: {value: 0, list: [1, 1, 1]},// 方法reducers: {// 增加1// 方法接收2个参数,第一个参数是变量,第二个参数是载荷(也就是使用方法传入的参数)increment: (state) => {state.value += 1;state.list.push(1);},// 减少1decrement: (state) => {state.value -= 1;state.list.pop(1);}},
});// 每个 case reducer 函数会生成对应的 Action creators
export const {increment, decrement} = counterSlice.actions;export default counterSlice.reducer;

24.3.4 使用

App.jsx

import React from "react";
import {useSelector, useDispatch} from "react-redux";
import {decrement, increment} from "./store/modules/counterSlice";
import Test from "./components/Test/index.jsx";export default function Person() {// 拿到store里的数据/状态const {value, list} = useSelector((state) => state.counter);// 通过dispatch调用store里面的方法const dispatch = useDispatch();return (<div><h2>Person -- {value}</h2><h2>list -- {list.length}</h2><button onClick={() => dispatch(increment())}>增加</button><button onClick={() => dispatch(decrement())}>减少</button><hr /><Test /></div>);
}

Test/index.jsx

该组件和 App.jsx 共享 state , App.jsx 调用方法修改数值后,Test 中的数值也跟着发生改变

import React, {Component} from 'react';
import {useSelector, useDispatch} from "react-redux";const Test = () => {// 拿到store里的数据/状态const {value, list} = useSelector((state) => state.counter);return (<div>测试组件:{value},{list.length}</div>);};
export default Test;

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

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

相关文章

GPIO的使用--操作PE02 PE03 PE04实现开关控制灯泡亮灭

效果&#xff1a; 开关控制灯的亮灭 目录 1.找到引脚组别(DEFG) led灯硬件结构 开关硬件结构 2.时钟使能 3.GPIO时钟控制 4.控制实现思路 5. 完整代码 6.视频演示 1.找到引脚组别(DEFG) 开关的引脚组别--E&#xff1b;LED灯的引脚组别--F led灯硬件结构 开关硬件结构…

【linux】基本指令(上篇)

1.快速认识5~6个指令 pwd指令 ls指令 touch指令 cd指令 clear指令 touch指令 详细讲解 首先有一个问题就是当我们创建一个文件&#xff0c;但是没有往里面写内容&#xff0c;那么磁盘上会有该文件吗&#xff1f; 磁盘上会保存&#xff0c;因为创建好的文件&#xff0c;没有…

Configure ssh-config简化ssh , scp命令;Screen 后台运行命令

1. Configure .ssh/config简化ssh, scp命令 # Configure myServer Host myServerHostName <ServerIP>User ubuntuIdentityFile /home/ubuntu/.ssh/<myServerKey>.pemssh 命令简化为. ssh myServer ssh myServerscp 命令简化为 scp -rp test.txt myServer:~/Down…

IDEA安装python插件并配置

目录 一、Mac1. 安装插件2. 新建项目3. 下载第三方库4. 配置镜像源 一、Mac 1. 安装插件 在plugins中搜索python 2. 新建项目 使用本项目独享的虚拟环境&#xff0c;选择解释器 如果需要修改解释器可以进入project structure&#xff0c;在SDKs中点击&#xff0c;选择add py…

clip-path,css裁剪函数

https://www.cnblogs.com/dzyany/p/13985939.html clip-path - CSS&#xff1a;层叠样式表 | MDN 我们看下这个例子 polygon里有四个值分别代表这四个点相对于原图左上方的偏移量。 裁剪个五角星

解决vue3项目打包发布到服务器后访问页面显示空白问题

1.在 vite.config.ts 文件中 加入 base:./ 当你将 base 设置为 / 时&#xff0c;它表示你的应用程序将部署在服务器的根路径上&#xff0c;&#xff08;将 base 设置为 / 表示你的应用程序部署在服务器的根路径上&#xff0c;并且 Vite 会相应地处理资源和路由的路径…

【UE】制作一块布

效果 步骤 1. 新建一个空白模板工程&#xff0c;新建一个Basic关卡 2. 选项模式选择“建模” 3. 创建一个矩形 宽度、深度设为500&#xff0c;宽度细分和深度细分设置为100&#xff0c;然后点击接受 此时在浏览器中编辑器也帮我们创建了一个矩形的静态网格体&#xff0c;这里…

C/C++---------------LeetCode第27. 移除元素

移除元素 题目及要求双指针在main内使用 题目及要求 给你一个数组 nums 和一个值 val&#xff0c;你需要 原地 移除所有数值等于 val 的元素&#xff0c;并返回移除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元…

MySQL数据库SQLSTATE[22007]: Invalid datetime format 日期类型不能为空值的解决办法

如果你的数据库是mysql&#xff0c; 如果你创建表或插入数据时遇到的BUG–它长这样&#xff1a; Invalid datetime format: 1292 Incorrect datetime value: ‘’ for column ‘xxx’ at row 1 或 1067 - Invalid default value for ‘xx’ 那么我将赐予你 两套剑法: &#…

Peter算法小课堂—差分与前缀和

差分 Codeforces802 D2C C代码详解 差分_哔哩哔哩_bilibili 一维差分 差分与前缀和可以说成减法和加法的关系、除法和乘法的关系、积分和微分的关系&#xff08;听不懂吧&#xff09; 给定数组A&#xff0c;S为A的前缀和数组&#xff0c;则A为S的差分数组 差分数组构造 现…

MySQL远程连接数据库

【0】数据库的安装及配置 Windows安装MySQL - 知乎 (zhihu.com) 【1】mysql远程连接数据库 1. 首先打开打开cmd窗口&#xff1a;winr ---------- cmd 2.输入用户名和密码进入数据库&#xff1a;mysql -u root -p 3.打开use mysql表&#xff1a;use mysql 4.执行远程连接(授…

TCP/IP_整理起因

先分享一个初级的问题&#xff1b;有个客户现场&#xff0c;终端设备使用客户网络更新很慢&#xff0c;使用手机热点更新速度符合预期&#xff1b;网络部署情况如下&#xff1a; 前期花费了很大的精力进行问题排查对比&#xff0c;怀疑是客户网络问题&#xff08;其他的客户现…

微信开发者工具真机调试连接状态在正常和未连接之间反复横跳

开启局域网模式能解决这个问题&#xff0c;目前只找到这一个方法

如何确保电脑硬件符合办公所需?

随着科技的快速发展&#xff0c;电脑设备已经成为现代办公的必需品。每个岗位对于办公的需求都不同&#xff0c;电脑硬件的配置也有所不同。如何确保电脑硬件符合员工办公所需&#xff1f; 可以使用电脑监控软件&#xff0c;安装后自动获取终端电脑硬件信息&#xff0c;根据员…

linux磁盘的LVM、交换分区以及文件系统

目录 逻辑卷LVM LVM管理 LVM特点 LVM的制作 创建物理卷 创建卷组 创建逻辑卷 格式化文件系统 挂载逻辑卷 LVM的扩容 添加硬盘做物理卷 卷组扩容 扩容逻辑卷 给文件系统扩容 LVM移除 LVM的缩容 交换分区 查看当前交换分区&#xff1a;free Swap&#xff1a;虚…

Ubuntu安装HP LaserJet P3010系列打印机驱动

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、安装驱动二、其它设置总结 前言 最近在研究Ubuntu Desktop版&#xff0c;无意间看到了打印机选项&#xff0c;就好奇去试了试。居然配置成功了&#xff0c…

单片机实验(三)

前言 实验一&#xff1a;利用定时器T1的中断控制P1.7引脚输出音频信号&#xff0c;启动蜂鸣器发出一段熟悉的与众不同的具有10个音节的音乐音频。 实验二&#xff1a;使用定时器/计数器来实现一个LCD显示年、月、日、星期 、时、分、秒的电子表&#xff0c;要求时和分可以方便…

负电源电压转换-TP7660H

负电源电压转换-TP7660H 简介引脚说明典型应用电路倍压与反压的应用电路 简介 TP7660H 是一款 DC/DC 电荷泵电压反转器专用集成电路。芯片能将输入范围为 2.5V&#xff5e;11V 的电压转换成相应的-2.5V&#xff5e;-11V 的输出&#xff0c;电压转换精度可达99.9%&#xff0c;电…

女子曝被医生男友下药流产,男子被警方行拘10日,医院停职!

近日&#xff0c;一则关于女子被医生男友暗中下堕胎药导致流产的消息引起了广泛关注。经过一个多月的报案和调查&#xff0c;如今有了新的进展。 11月30日&#xff0c;王女士向华商报大风新闻记者证实&#xff0c;北京中关村某医院涉事医生已被行政拘留&#xff0c;被处以行政拘…

RabbitMQ学习一

RabbitMQ学习 RabbitMQ相关概念Virtual host数据隔离SpringAMQP第一种 基本消息模型第二种 WorkQueues模型第三种 发布订阅模型&#xff08;fanout交换机&#xff09;fanout交换机实例 第四种 Direct交换机direct交换机实例基于注解的方式声明——direct交换机 第五种Topic交换…