React中使用Redux

news2024/11/19 23:41:00

1.为什么要使用redux

        redux是一个专门用于状态管理的一个库,和vue中的vuex功能类似。其中核心点就是状态的管理。虽然我们无论在vue还是在react中我们组件间的通行都可以使用消息总线或者父子组件间的消息传递来进行操作。但是如果我们需要A组件的状态在其他十个或者二十个组件上进行使用时。这时候如果时候上述的方法来进行就会显示很麻烦,因此我们使用redux来进行全局管理状态。

2.redux的安装和使用

        由于在react的版本中,我们不能在使用createStore来创建一个全局的store对象。因为该方法可能会在未来的某个时刻被抛离掉。因此在这里我们使用了react官网中推荐我们使用的方法。

        其官网链接如下快速开始 | Redux 中文官网

npm install @reduxjs/toolkit react-redux

3.文件目录 

        下面是redux的工作图。我们可以从中发现,无论我们需要共享的数据怎么变,其核心都是我们的组件从store中去数据,当我们的组件需要修改数据时,我们就通过action来与store来进行数据交互,而并不是直接操作数据。这一点和vuex中的dispatch action mutation类似。

 

        首先我们需要创建一个全局的store文件来进行全局的管理。这里Toolkit中给我们将createStore进行了封装。我们就只需要调用该方法就可以完成创建一个最简单的store的模版管理库。

import { configureStore } from '@reduxjs/toolkit'

export default configureStore({
  reducer: {}
})

        其次我们就只需要将对应状态的文件来进行对应的创建即可。这里我们就只是创建了一个count文件。  

        Redux 要求我们通过创建数据副本和更新数据副本,来实现不可变地写入所有状态更新。不过 Redux Toolkit createSlice 和 createReducer 在内部使用 Immer 允许我们编写“可变”的更新逻辑,变成正确的不可变更新。因此在这里我们可以通过使用提供的API来进行对应的仓库数据的创建。这里直接借用了官方文档中的样例,我们其实细心的可以发现,使用了这个的API创建的文件和我们vuex中的文件是不是很类似。都是拥有了类似的属性。

import { createSlice } from '@reduxjs/toolkit'

export const counterSlice = createSlice({
  name: 'counter',
  initialState: {
    value: 0
  },
  reducers: {
    increment: state => {
      // Redux Toolkit 允许我们在 reducers 写 "可变" 逻辑。它
      // 并不是真正的改变状态值,因为它使用了 Immer 库
      // 可以检测到“草稿状态“ 的变化并且基于这些变化生产全新的
      // 不可变的状态
      state.value += 1
    },
    decrement: state => {
      state.value -= 1
    },
    incrementByAmount: (state, action) => {
      state.value += action.payload
    }
  }
})
// 每个 case reducer 函数会生成对应的 Action creators
// 这里为什么要这么暴露。因为我们所创建的reducers其实是和actions中挂钩的。这里之所以采取这样暴露的形式是因为我们在修改数组的时候采取的dispatch的形式。因此我们需要在dispatch中添加我们需要调用的方法。
export const { increment, decrement, incrementByAmount } = counterSlice.actions

export default counterSlice.reducer

        然后我们就只需要在需要的页面中进行引用即可。下面是测试的相关代码。

// 这里我们声明一个store来协助我们操作redux

const store = configureStore({

//其中的reducer是用来存放各个模块间的存函数的

reducer:{

count:countCreateSlice,

},

})

export default store

 

// 这边就类似于创建对应的分片,将符合要求的分片对应创建纯函数

import {createSlice} from '@reduxjs/toolkit'

const countSlice = createSlice({

name:'counter',

initialState:{

count:0,

},

reducers:{

incremented: state => {

console.log(state.count)

// Redux Toolkit 允许在 reducers 中编写 "mutating" 逻辑。

// 它实际上并没有改变 state,因为使用的是 Immer 库,检测到“草稿 state”的变化并产生一个全新的

// 基于这些更改的不可变的 state。

state.count += 1

},

decremented: state => {

state.count -= 1

}

}

})


 

export const { incremented, decremented } = countSlice.actions

export default countSlice.reducer

import { useSelector, useDispatch } from 'react-redux'

 //这里的count就是我们在store中reducer中的key值

const count = useSelector(state => state.count.count)

function addOne(params) {

dispatch(decremented())

}

4.总结

        其实上述的用法知识redux中最简单的使用技巧。因为react比较式mvm模型,不像vue那是数据已修改页面就自动修改。 上述的redux的使用也是最简单的时候。后续我们可以将redux与UI中的模型库进行链接。

 

 

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

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

相关文章

Python开发项目基于卷积神经网络的车牌识别仿真软件

博主介绍:擅长Java、微信小程序、Python、Android等,专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇🏻 不然下次找不到哟 Java项目精品实战案例…

MongoDB初体验-安装使用教程2023.7

前言:博主第一次接触MongoDB,看了一圈网上现有的教程,不是缺少细节就是有问题没交代清楚,特整理了一下自己安装运行的过程,从下载安装到开机自启,全程细节齐全、图文并茂、简单易懂。 目录 1. 从官网下载2…

1-4 架构师所需要具备的技术栈与能力

架构师所需要具备的技术栈与能力 全局图解 全局图解

JavaWeb(4)——HTML、CSS、JS 快速入门

一、JavaScript 数组 数组筛选&#xff08;查找&#xff0c;将原来数组中的某些数据去除&#xff09; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content&quo…

2023年中国传媒大学程序设计大赛(同步赛)F.舞台矩形

一个简单的线段树维护最值&#xff0c;容易犯错的地方在于y相等的时候不应该省略 这个地方调了一会发现自己傻了 #include<bits/stdc.h> #define ls u<<1 #define rs u<<1|1 using namespace std; const int N 1e510; typedef long long ll; const ll INF …

DAPP(七)——React与智能合约的架构整合

合并一下react和智能合约&#xff0c;创建react脚手架 create-react-app myapp 将合约中对应的文件 复制到 react脚手架的根目录中 结果如下&#xff1a; 下载合约所要的依赖&#xff1a; npm i openzeppelin-solidity 可以在脚手架终端执行truffle的命令语句&#xff0c;t…

maven配置java outofmemory选项

在maven之中选择Add VM options&#xff0c;这样命令就多出来一个关于VM options配置的属性&#xff0c;此时就可以输入对于VM的设置

SpringMVC 中的数据绑定如何使用 @ModelAttribute 注解

SpringMVC 中的数据绑定如何使用 ModelAttribute 注解 引言 SpringMVC 是一个基于 Spring 框架的 Web 框架&#xff0c;它提供了一种简单、灵活的方式来开发 Web 应用程序。在开发 Web 应用程序时&#xff0c;我们需要将用户提交的数据绑定到我们的 Java 对象上。SpringMVC 提…

Orleans 微软基于 Actor 的分布式框架

一、Actor模型工作原理 Actor模型是一种并发编程模型&#xff0c;它基于消息传递实现&#xff0c;是一种轻量级的并发模型。在Actor模型中&#xff0c;每个Actor都是一个独立的执行单元&#xff0c;它可以接收和发送消息&#xff0c;并且可以执行一些本地操作&#xff0c;但是不…

【Java进阶之路】ArrayList源码分析

概述 ArrayList 是 java 集合框架中比较常用的数据结构了。继承自 AbstractList&#xff0c;实现了 List 接口。底层基于数组实现容量大小动态变化。允许 null 的存在。同时还实现了 RandomAccess、Cloneable、Serializable 接口&#xff0c;所以ArrayList 是支持快速访问、复…

no main manifest attribute, in schoolspringboot-0.0.1-SNAPSHOT.jar

no main manifest attribute, in schoolspringboot-0.0.1-SNAPSHOT.jar 部署springboot项目jar包报错。解决方案&#xff1a; pom文件添加 <build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot…

web前端项目使用electron打包成跨平台桌面端程序(Windows)

文章目录 Electron是什么&#xff1f;快速入门基本使用要求从github下载一个开源项目执行启动脚本运行项目安装electron依赖包编写electron入口文件&#xff0c;在package.json中配置入口文件路径和electron执行脚本启动electron脚本&#xff0c;运行electron应用 应用打包Wind…

linux原生串口开发

1.在linux环境下封装串口相关代码 &#xff08;1&#xff09;vi uartTool.c #include <stdio.h> #include <stdlib.h> #include <stdint.h> #include <stdarg.h> #include <string.h> #include <termios.h> #include <unistd.h> #…

thinkphp 上传图片

public function upload_img(){// 读取图片资源// 存储路径$path "uploads/avatar";$file request()->file(background_img);// 存储图片$info $file->rule(uniqid)->move($path);// 存储成功if ($info) {//获取到上传图片的路径名称$name_img $path . …

计算机组成原理课程设计 报告

在我的博客查看&#xff1a;https://chenhaotian.top/study/computer-composition-principles-course-design/ 计算机组成原理课程设计 报告 一、目的和要求 深入了解计算机各种指令的执行过程&#xff0c;以及控制器的组成&#xff0c;指令系统微程序设计的具体知识&#xf…

plsql如何将表导出excel,同时表头是中文字段名

1、导出表中所有的字段名和对应注释&#xff0c;导出ecxel。 SELECT t.column_name,t.comments FROM user_col_comments t WHERE TABLE_NAMEHT_ORDER_INFO; 2、根据导出的excel自动生成查询的SQL。 3、根据SQL进行导出。

【菜鸟の笔记_利用Excel自动总结表格数据_自动链接word文本】

自动更新总结表格数据 1. 撰写原因2. 解决的问题3. Excel自动总结表格数据内容&#xff08;一段话&#xff09;。3.1问题引出3.2解决方式 4.Excel数据、总结内容&#xff0c;自动链接更新Word文本 1. 撰写原因 【GPT的答案】利用Excel自动总结表格数据有以下好处&#xff1a; …

mmc记录

1、获取csd&#xff0c;也就是DSR寄存器 说是应该可以获取块长度、卡存储容量等&#xff0c;但是在8953上&#xff0c;没看到这个日志 参考&#xff1a; 一、有6个主要的和寄存器 1、OCR寄存器 描述了存储卡的Vdd电压描述 &#xff0c;总共32Bit Bit31 --- 卡上电状态位&…

【已解决】JavaScript为控件绑定事件死活不生效

本博文源于最近操作的JavaScript一个诡异的事情。我在用js一个动态生成的按钮&#xff0c;然后想要为其绑定一个alert的事件&#xff0c;结果发现控制台给我报未定义的错误&#xff0c;我慌的不要要的&#xff0c;经过长时间胡乱尝试终于解决了。 问题再现 dataHtml "&…

ModaHub魔搭社区:AI原生云向量数据库Zilliz Cloud数据类型JSON

JSON 全称为 JavaScript Object Notation,是一种轻量级且易于使用的文本数据格式。JSON 字段由键值对组成,其中每个键是一个字符串,其相应的值可以是数字、字符串、布尔值、列表或数组。Zilliz Cloud 支持将字段以字典的形式插入到集群的 Collection 中。 以下示例代码展…