react之基于@reduxjs/toolkit使用react-redux
react之基于@reduxjs/toolkit使用react-redux
- 一、配置基础环境
- 二、使用React Toolkit 创建 counterStore
- 三、为React注入store
- 四、React组件使用store中的数据
- 五、实现效果
- 六、提交action传递参数
- 七、异步状态操作
一、配置基础环境
1.使用cra快速创建一个react项目
npx create-react-app react-redux
2.安装@reduxjs/toolkit react-redux
npm i @reduxjs/toolkit react-redux
3.启动项目
npm start
4.创建store文件modules存储子store模块index.js组合modules中所有子模块,并导出store

整体路径

二、使用React Toolkit 创建 counterStore
nodules目录下counterStore.js
//从toolkit中引入 createSlice
import { createSlice } from '@reduxjs/toolkit'// 定义数据
const counterStore = createSlice({name: 'counter',//初始化stateinitialState: {count: 0,},//修改状态的方法 同步 支持直接修改reducers: {//加addFn(state) {state.count++},//减delFn(state) {state.count--},},
})//解构出来actionCreater函数
const { addFn, delFn } = counterStore.actions//获取reducer
const reducer = counterStore.reducer//按需导出 actionCreater
export { addFn, delFn }//默认导出reducer
export default reducer
store目录下index.js
import { configureStore } from '@reduxjs/toolkit'//引入默认导出的
import counterReducer from './modules/counterStore'//创建根store组合子模块
const store = configureStore({reducer: {counter: counterReducer,},
})//导出
export default store
三、为React注入store
根目录下的index.js
//引入store
import store from './store'
//引入provider
import { Provider } from 'react-redux'const root = ReactDOM.createRoot(document.getElementById('root'))
root.render(<Provider store={store}><App></App></Provider>
)
四、React组件使用store中的数据
根目录下的App.js
//从react-redux中引入useSelector useDispatch
import { useSelector, useDispatch } from 'react-redux'//导入添加 减去方法
import { addFn, delFn } from './store/modules/counterStore'
function App() {//解构const { count } = useSelector((state) => state.counter)//得到dispatch函数const dispatch = useDispatch()return (<div className="App"><button onClick={() => dispatch(delFn())}>-</button>{count}<button onClick={() => dispatch(addFn())}>+</button><ul></ul></div>)
}export default App
五、实现效果

六、提交action传递参数

七、异步状态操作
1.modules目录下channelStore.js
//从tookit中引入createSlice
import { createSlice } from '@reduxjs/toolkit'
// 引入axios
import axios from 'axios'
//定义数据
const listStore = createSlice({name: 'list',//初始化initialState: {list: [],},//修改同步方法reducers: {setList(state, action) {state.list = action.payload},},
})//解构出来reducers
const { setList } = listStore.actions
//异步请求方法
const getList = () => {return async (dispatch) => {const res = await axios.get('接口地址')dispatch(setList(res.data.data.channels))}
}//获取reducer
const reducer = listStore.reducer//导出异步方法
export { getList }//默认导出reducer
export default reducer
2.store目录下index.js
import { configureStore } from '@reduxjs/toolkit'//引入默认导出的
import counterReducer from './modules/counterStore'
import listReducer from './modules/channelStore'
//创建根store组合子模块
const store = configureStore({reducer: {counter: counterReducer,list: listReducer,},
})//导出
export default store
3.页面中使用
//从react-redux中引入useSelector useDispatch
import { useSelector, useDispatch } from 'react-redux'
import { useEffect } from 'react'
//导入获取列表异步方法
import { getList } from './store/modules/channelStore'function App() {const dispatch = useDispatch()useEffect(() => {dispatch(getList())}, [dispatch])//解构const { list } = useSelector((state) => state.list)//得到dispatch函数return (<div className="App"><ul>{list.map((item) => (<li key={item.id}>{item.name}</li>))}</ul></div>)
}export default App
相关文章:
react之基于@reduxjs/toolkit使用react-redux
react之基于reduxjs/toolkit使用react-redux 一、配置基础环境二、使用React Toolkit 创建 counterStore三、为React注入store四、React组件使用store中的数据五、实现效果六、提交action传递参数七、异步状态操作 一、配置基础环境 1.使用cra快速创建一个react项目 npx crea…...
基于51单片机水位监测控制报警仿真设计( proteus仿真+程序+设计报告+讲解视频)
这里写目录标题 💥1. 主要功能:💥2. 讲解视频:💥3. 仿真💥4. 程序代码💥5. 设计报告💥6. 设计资料内容清单&&下载链接💥[资料下载链接:](https://doc…...
git基本用法和操作
文章目录 创建版本库方式:Git常用操作命令:远程仓库相关命令分支(branch)操作相关命令版本(tag)操作相关命令子模块(submodule)相关操作命令忽略一些文件、文件夹不提交其他常用命令 创建版本库方式: 创建文件夹 在目录下 右键 Git Bush H…...
设计模式-组合模式-笔记
“数据结构”模式 常常有一些组件在内部具有特定的数据结构,如果让客户程序依赖这些特定数据结构,将极大地破坏组件的复用。这时候,将这些特定数据结构封装在内部,在外部提供统一的接口,来实现与特定数据结构无关的访…...
Android 弹出自定义对话框
Android在任意Activity界面弹出一个自定义的对话框,效果如下图所示: 准备一张小图片,右上角的小X图标64*64,close_icon.png,随便找个小图片代替; 第一步:样式添加,注意:默认在value…...
(论文阅读40-45)图像描述1
40.文献阅读笔记(m-RNN) 简介 题目 Explain Images with Multimodal Recurrent Neural Networks 作者 Junhua Mao, Wei Xu, Yi Yang, Jiang Wang, Alan L. Yuille, arXiv:1410.1090 原文链接 http://arxiv.org/pdf/1410.1090.pdf 关键词 m-RNN、…...
4核8G服务器价格选择轻量还是CVM合适?
腾讯云服务器4核8G配置优惠价格表,轻量应用服务器和CVM云服务器均有活动,云服务器CVM标准型S5实例4核8G配置价格15个月1437.3元,5年6490.44元,轻量应用服务器4核8G12M带宽一年446元、529元15个月,腾讯云百科txybk.com分…...
Selenium操作已经打开的Chrome浏览器窗口
Selenium操作已经打开的Chrome浏览器窗口 0. 背景 在使用之前的代码通过selenium操作Chrome浏览器时,每次都要新打开一个窗口,觉得麻烦,所以尝试使用 Selenium 获取已经打开的浏览器窗口,在此记录下过程 本文使用 chrome浏览器来…...
创新研报|新业务发展是CEO推动企业增长的必要选择 – Mckinsey研究
🔍📈 创新研究报告 |新业务拓展:CEO推动企业成长的必然选择 – 麦肯锡研究 🔥💼 所有执行长和商界领袖请注意!您是否正在寻找为您的组织释放成长机会的钥匙? 🌐 麦肯锡最近的一份研究…...
rv1126-rv1109-openssh
这是一个工具,可以通过ssh远程登录来操作,非常逆天! 于是rv1109代码自身自带有openssh 所以只需要打开config即可 diff --git a/buildroot/configs/rockchip_rv1126_rv1109_spi_nand_defconfig b/buildroot/configs/rockchip_rv1126_rv1109…...
MySQL中json类型,你使用过吗
在最近的项目开发过程中,遇到了消息发送内容以Map形式存储的情况。最初的解决方案是将对象转换为字符串,并存储在MySQL的varchar(3000)字段中。然而,由于对存储空间的限制,不得不寻找其他解决方案。在调研中发现,从MyS…...
MATLAB 状态空间设计 —— LQG/LQR 和极点配置算法
系列文章目录 文章目录 系列文章目录前言一、相关函数 —— LQG/LQR 和极点配置算法1.1 LQR —— lqr 函数1.1.1 函数用法1.1.2 举例1.1.2.1 倒摆模型的 LQR 控制 1.2 LQG —— lqg() 函数1.2.1 函数用法1.2.2 举例 1.3 极点配置 —— place() 函数1.3.1 函数用法1.3.2 示例1.3…...
杭州-区块链前瞻性论坛邀请函
2023密码与安全前瞻性论坛邀请函 生成合法节点或非法节点,测试共识协议...
ElasticSearch学习篇6_ES实践与Lucene对比及原理分析技术分享小记
前言 QBM、MFS的试题检索、试题查重、公式转换映射等业务场景以及XOP题库广泛使用搜索中间件,业务场景有着数据量大、对内容搜索性能要求高等特点,其中XOP题库数据量更是接近1亿,对检索性能以及召回率要求高。目前QBM、MFS使用的搜索中间件是…...
mysql练习1
-- 1.查询出部门编号为BM01的所有员工 SELECT* FROMemp e WHEREe.deptno BM01; -- 2.所有销售人员的姓名、编号和部门编号。 SELECTe.empname,e.empno,e.deptno FROMemp e WHEREe.empstation "销售人员";-- 3.找出奖金高于工资的员工。 SELECT* FROMemp2 WHE…...
【2017年数据结构真题】
请设计一个算法,将给定的表达式树(二叉树)转换成等价的中缀表达式(通过括号反映次序),并输出。例如,当下列两棵表达式树作为算法的输入时: 输出的等价中缀表达式分别为(ab)(a(-d)) 和…...
神辅助 Cursor 编辑器,加入 GPT-4 让编码更轻松!
分类 互联网 在 ChatGPT 问世之前,我们的编码方式很多时候都是面向搜索引擎编码,需要不断地进行搜索,然后复制粘贴,俗称复制粘贴工程师。 但是,随着ChatGPT的出现,这一切将彻底改变。 ChatGPT 是一种基于…...
解决Qt5.13.0无MySQL驱动问题
一、前言 由于Qt5.12.3是最后提供mysql数据库插件的版本,往后的版本需要自行编译对应的mysql数据库插件,官方安装包不再提供。使用高版本的Qt就需要自行编译mysql驱动。 若没有编译在QT中调用Qsqldatabase库连接mysql时,提示出现如下问题&a…...
YOLOv8改进 | 如何在网络结构中添加注意力机制、C2f、卷积、Neck、检测头
一、本文介绍 本篇文章的内容是在大家得到一个改进版本的C2f一个新的注意力机制、或者一个新的卷积模块、或者是检测头的时候如何替换我们YOLOv8模型中的原有的模块,从而用你的模块去进行训练模型或者检测。因为最近开了一个专栏里面涉及到挺多改进的地方ÿ…...
记录一个困难
Mysql加插件 create table tb_xuesheng1 as select * from tb_xuesheng; 会报如下错误 SQL 错误 [3185] [HY000]: Cant find master key from keyring, please check in the server log if a keyring is loaded and initialized successfully.当我去搜寻答案网上都说缺少插件…...
WindowResizer:打破窗口限制,实现Windows窗口自由调整的终极解决方案
WindowResizer:打破窗口限制,实现Windows窗口自由调整的终极解决方案 【免费下载链接】WindowResizer 一个可以强制调整应用程序窗口大小的工具 项目地址: https://gitcode.com/gh_mirrors/wi/WindowResizer 你是否曾遇到过某些应用程序窗口大小被…...
终极文件伪装指南:如何3分钟让任何文件“隐形“传输
终极文件伪装指南:如何3分钟让任何文件"隐形"传输 【免费下载链接】apate 简洁、快速地对文件进行格式伪装 项目地址: https://gitcode.com/gh_mirrors/apa/apate 在当今数据安全日益重要的时代,apate文件伪装工具为开发者和技术爱好者…...
用Python和PyTorch手把手搭建你的第一个脉冲神经网络(SNN)模型
用Python和PyTorch手把手搭建你的第一个脉冲神经网络(SNN)模型 当你第一次听说"脉冲神经网络"时,脑海中可能会浮现出科幻电影里那些会思考的机器。但事实上,这种模拟生物神经元工作方式的算法已经悄然走进现实。作为一名…...
解锁Mac网络新姿势:HoRNDIS驱动让Android USB共享一键直达
解锁Mac网络新姿势:HoRNDIS驱动让Android USB共享一键直达 【免费下载链接】HoRNDIS Android USB tethering driver for Mac OS X 项目地址: https://gitcode.com/gh_mirrors/ho/HoRNDIS 还在为Mac无法直接使用Android手机的网络而烦恼吗?HoRNDIS…...
GLM-4.1V-9B-Base与Dify联动:零代码构建企业级AI应用平台
GLM-4.1V-9B-Base与Dify联动:零代码构建企业级AI应用平台 1. 企业AI应用的新选择 最近接触了不少企业客户,发现一个普遍现象:大家都想用AI,但真正能用起来的却不多。技术门槛高、开发周期长、维护成本大,这些问题让很…...
终极指南:3个简单步骤免费下载B站4K大会员视频
终极指南:3个简单步骤免费下载B站4K大会员视频 【免费下载链接】bilibili-downloader B站视频下载,支持下载大会员清晰度4K,持续更新中 项目地址: https://gitcode.com/gh_mirrors/bil/bilibili-downloader 你是否曾遇到过这样的场景&…...
gcc编译与gdb使用
一、GCC介绍1.1 GNU工具集GNU 工具集是由自由软件基金会发起的 GNU 项目孕育而生,始于20世纪80年代初,旨在构建完全自由的操作系统,其核心原则强调用户自由使用、修改和分发软件的权利,极大推动了自由软件运动和开源生态系统发展&…...
解锁专利数据价值:Google Patents Public Data全流程应用指南
解锁专利数据价值:Google Patents Public Data全流程应用指南 【免费下载链接】patents-public-data Patent analysis using the Google Patents Public Datasets on BigQuery 项目地址: https://gitcode.com/gh_mirrors/pa/patents-public-data 企业如何突破…...
Source Sans 3:现代UI设计的无衬线字体解决方案
Source Sans 3:现代UI设计的无衬线字体解决方案 【免费下载链接】source-sans Sans serif font family for user interface environments 项目地址: https://gitcode.com/gh_mirrors/so/source-sans 30秒快速了解 全字重覆盖:从ExtraLight到Blac…...
微服务通信:同步 vs 异步与MQ选型指南
微服务通信:同步 vs 异步与MQ选型指南 基于黑马程序员《SpringCloud微服务开发与实战》MQ篇整理。本文深度解析微服务间两种通信模式的核心差异,并提供主流消息队列(RabbitMQ、RocketMQ、Kafka)的技术选型决策框架。 一、同步调用…...
