React中使用Redux

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.actionsexport 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.hqwc.cn/news/26409.html

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

相关文章

面试题汇总——Java集合(Collection和Map)

1简单介绍一下Java集合类 位置:Java的所有集合类都在java.util包下,从JDK5.0开始为了处理多线程环境下的并发安全问题,又在java.util.concurrent包下提供了一些多线程支持的集合类。 内容:Java的集合类主要有两个接口派生而出:Collection和Map。 1.1Collection Collect…

重封装Ehcache与Redis模板以便于一二级缓存同步数据(二)

参考: 一级缓存二级缓存的获取与更新顺序(一) 简单封装Ehcache与RedisTemplate模版 通常使用一二级缓存时,必须保持一二级缓存数据数据与数据库中数据保持一致 ;此时可以简单封装下,一二级缓存的相关接口,便于我…

多元函数的混合偏导数

直接看图: 引自知乎:点击跳转知乎链接

记录自己的程序移植经历(裸机软PLC C语言程序移植到Linux)

先说一下本人的基础,本人是一个小公司初来乍到的实习生,拿到这个任务的时候,不懂PLC,而对于linux只懂一点点皮毛的操作。结果硬是把程序移植完毕且能顺利运行。 该程序是嵌入式软PLC,主要代码是对四元式指令的解析。说…

可移植性测试包括哪些

可移植性测试 可移植性是指应用程序能够安装到不同的环境中,在不同的环境中使用,甚至可以移动到不同的环境中。当然,前两者对所有系统都很重要。就PC软件而言,鉴于操作系统、共存和互操作应用程序、硬件、带宽可用性等方面的快速…

Kubespray v2.22.1 在线部署 kubernetes v1.26.5 集群

文章目录 1. 介绍2. 预备条件3. 配置 hostname4. yum5. 下载介质5.1 git 下载5.2 下载 kubespray v2.22.1 6. 编写 inventory.ini7. 配置互信8. 安装 ansible9. 关闭防火墙10. 安装 docker11. 配置内核参数12. 启动容器 kubespray13. 部署14. 配置连接集群 1. 介绍 kubespray​…

【005】基于深度学习的图像语 通信系统

摘要 语义通信是一种新颖的通信方式,可通过传输数据的语义信息提高带宽效率。提出一种用于无线图像传输的系统。该系统基于深度学习技术开发并以端到端(E2E)的方式进行训练。利用深度学习实现语义特征的提取和重建,在发送端提取信…

干货整理,自动化测试-数据依赖解决方案详细,一篇通透...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 解决自动化数据依…

分布式ELK 企业级日志分析系统

一、ELK的相关知识 1.ELK简介 ELK平台是一套完整的日志集中处理解决方案,将 ElasticSearch、Logstash 和 Kiabana 三个开源工具配合使用, 完成更强大的用户对日志的查询、排序、统计需求。 ElasticSearch:是基于Lucene(一个全文检…

postman:模拟发送一个需要 cookie 认证的请求

目录 前言: 1、chrome 已安装插件 intercept。 2、chrome 浏览器要设置打开,在运行期间浏览器要一直打开。 3、本人是用 fiddler 对 app 的请求进行抓包,也可以使用其他工具。查看 headers 里的 cookie,并复制。 4、将复制的…

纯css3实现小鸡从鸡蛋破壳而出动画特效

实现一个使用纯css3实现小鸡破壳的效果 示例效果如下所示 示例代码 <template><div><div class"eggWrapper"><div class"chickHead"><div class"eyeDiv"></div><div class"eyeDiv"></di…

【K8S系列】深入解析K8S监控

序言 做一件事并不难&#xff0c;难的是在于坚持。坚持一下也不难&#xff0c;难的是坚持到底。 文章标记颜色说明&#xff1a; 黄色&#xff1a;重要标题红色&#xff1a;用来标记结论绿色&#xff1a;用来标记论点蓝色&#xff1a;用来标记论点 Kubernetes (k8s) 是一个容器编…