当前位置: 首页 > news >正文

redux Tookit的配置流程

需要安装插件:npm install @reduxjs/toolkit

然后创建store根目录,用来做总的store

1. ​store根目录​

  • 用途​:集中管理整个应用的状态(全局状态池)。
  • 类比​:类似银行的“总行金库”,统一存放所有数据。
  • 优势​:
    • 避免状态分散在组件中,便于维护和调试。
    • 支持跨组件共享数据(如用户登录状态)。

2. ​modules子目录​

  • 用途​:按业务功能拆分状态模块(分治思想)。
  • 文件示例​:
    • counterStore.js:管理计数器状态(如count值)。
    • channelStore.js:管理频道列表数据(如channels: [])。
  • 优势​:
    • 模块化开发,降低复杂度。
    • 团队协作时可按功能分配开发任务。

首先在子模块中定义方法并且传出对应reducer以供生成store:

reducer由slice(切片)生成:const reducer = slice.reducer;

slice(切片)由createSlice生成:const Slice = createSlice(里面装填该模块的state和修改该模块state的方法)

createSlice()传的参数为一个对象,对象必须包含:name:定义切片的名称,并且生成action类型的前缀;initialState:定义该切片的初始状态;reducers:包含全部reducer函数的对象

import { createSlice } from "@reduxjs/toolkit"; const counterStore = createSlice({ name: "counter", // 初始化state initialState: { count: 0, }, // 修改状态的方法 同步方法 支持直接修改 reducers: { increment(state) { state.count++; }, decrement(state) { state.count--; }, }, }); // 解构出来actionCreater函数 const { increment, decrement } = counterStore.actions; // 获取reducer const reducer = counterStore.reducer; // 以按需导出的方式导出actionCreater export { increment, decrement }; // 以默认导出的方式导出reducer export default reducer;

*在这些module子目录中的业务功能是先用slice来写,然后把其业务功能如:{ increment, decrement }导出,然后还需要为上层的store根目录提供reducer来创建store,最上层用到的还是store*

然后在index.js中生成store传出:

首先必须先获取到configureStore方法:

这个是增强版本的creatStore

// 第1行:从Redux Toolkit导入核心API import { configureStore } from "@reduxjs/toolkit";

完整代码:

import { configureStore } from "@reduxjs/toolkit"; //导入子模块reducer,因为默认导出就是reducer = counterStore.reducer,所以counterReducer知识命名 import counterReducer from "./modules/counterStore"; const store = configureStore({ reducer: { counter: counterReducer, }, }); ​//将创建好的 Store 实例导出,供应用最上层(如 main.jsx)通过 Provider 注入到 React 组件树中。 export default store;

那么就是说,先对模块A进行命名、状态初始化、方法定义,然后用createslice来创建他的slice实例,然后调出slice实例中的reducer(关键)和action(修改方法),然后将模块A的reducer给到总的configureStore来创建总的store再后续

接下来为React注入store后就可以使用了

react-redux负责把Redux和React链接起来,内置Provider组件通过store参数把创建好的store实例注入到应用中,链接正式建立。

在react项目层的index.js中进行绑定

import { Provider } from "react-redux"; import store from "./store";

使用provide组件将这个根组件进行包裹,并且定义store = {store}

<Provider store={store}> <App /> </Provider>

完整:index.js:

import React from "react"; import ReactDOM from "react-dom/client"; import "./index.css"; import App from "./App"; import reportWebVitals from "./reportWebVitals"; import { Provider } from "react-redux"; import store from "./store"; const root = ReactDOM.createRoot(document.getElementById("root")); root.render( <React.StrictMode> <Provider store={store}> <App /> </Provider> </React.StrictMode> ); // If you want to start measuring performance in your app, pass a function // to log results (for example: reportWebVitals(console.log)) // or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals reportWebVitals();

那如何在React组件中使用store的数据

需要用到一个钩子函数——useSelector,可以把store中的数据映射到组件中

import logo from "./logo.svg"; import "./App.css"; import { useDispatch, useSelector } from "react-redux"; function App() { //把store中的数据映射到组件中 const { count } = useSelector((state) => state.counter); return ( <div className="App"> <div>{count}</div> </div> ); } export default App;

那React组件如何修改store中的数据

React组件中修改store中的数据需要借助另外一个hook函数 - useDispatch,它的作用是生成提交action对象的第三patch函数

还需将原定义在各个模块中的方法导入到App.js中,方便直接调用

import logo from "./logo.svg"; //将用于调用方法的useDispa导入 import { useDispatch, useSelector } from "react-redux"; //将修改方法导入进来 import { increment, decrement } from "./store/modules/counterStore"; function App() { //把store中的数据映射到组件中 const { count } = useSelector((state) => state.counter); const dispatch = useDispatch(); return ( <div className="App"> <button onClick={() => dispatch(increment())}>+</button> <div>{count}</div> <button onClick={() => dispatch(decrement())}>-</button> </div> ); } export default App

总流程:

也就是说使用store的过程是,先在总的index.js中使用provide宣告全局这个总的store,然后包裹全局。再去到特定需要使用store的组件,然后调用useSelect方法获取到对应的状态的值,如果需要修改的话要把一开始定义状态模块的方法action一起导入到里面去,然后使用usedispatch方法生成dispatch方法,然后再dispatch里面调用对应的action的方法就可以实现对状态的操作了!!

先对模块 A 使用createSlice进行命名、状态初始化、reducer 方法定义,创建它的 slice 实例;

然后导出 slice 实例中的reducer(核心)actions(修改方法)

接着把模块 A 的reducer配置到configureStore中,创建全局总 store;

在项目入口文件(如 index.js)中,使用Provider组件包裹根组件,并传入总 store,实现 store 全局可用;

在需要使用状态的组件里:

  • useSelector方法获取 store 中对应的状态值;
  • 如果需要修改状态,先导入该模块导出的actions,再用useDispatch生成 dispatch 方法,最后通过dispatch(对应action方法())实现状态修改。

极简记忆版(推荐)

  1. createSlice生成 →reducer+actions
  2. configureStore整合所有 reducer
  3. Provider全局注入 store
  4. 组件内:useSelector取数据,useDispatch+actions改数据
http://www.cnnetsun.cn/news/1364589.html

相关文章:

  • 终于搞清楚了!盲盒小程序开发设计全过程!
  • 中断与信号
  • 计算机毕业设计之springboot学生会事务管理平台的设计与实现
  • Web3未落地,Web4已破局:AI+区块链重构互联网下一代图景
  • afc登录后,右上角站内消息图标如何去掉?
  • YOLOv8与伏羲模型联动:基于视频流的实时恶劣天气检测与预报系统
  • AnythingtoRealCharacters2511部署教程:NVIDIA Jetson Orin Nano边缘端轻量部署方案
  • LightOnOCR-2-1B应用案例:多语言文档批量处理,解放双手
  • StructBERT语义匹配系统效果对比:专业术语与日常用语匹配精度
  • Mirage Flow在数学工具开发中的应用:MathType插件
  • 神经符号AI:让机器人“想”得更清楚,“做”得更精准
  • ClearerVoice-Studio语音处理全流程保姆级教学:5分钟搞定降噪分离
  • 智能组合实体员中的树形结构管理与遍历算法
  • 春秋云镜-多CVE实战:从Wuzhicms到SEMCMS的SQL注入漏洞复现与手法解析
  • 考研复试离散数学核心考点与实战解析
  • 职场PUA最隐蔽的6句“专业话术”,听起来很对,实则在摧毁你【职场反PUA30天 Day2】
  • AI头像生成器在计算机视觉中的实际应用
  • Python自动化:3分钟搞定微信收藏链接批量导出到TXT(附完整代码)
  • PyTorch实战:CUDA_VISIBLE_DEVICES环境变量的高效配置与多GPU管理
  • Redis Manager:一站式Redis集群管理平台从部署到运维实践指南
  • OpenStack Train版三节点部署实战:从CentOS 7.6配置到Dashboard访问
  • 避坑指南:ZCU111开发板VADJ_FMC电压修改后重启失效的解决方案
  • H3C R4900 G3 服务器RAID配置与BIOS固件升级实战指南
  • ESXI 7.0保姆级教程:如何正确挂载外接机械硬盘(含常见错误排查)
  • 快速优化IDEA插件下载体验:国内节点加速与hosts配置实战
  • Huber损失函数实战:如何在PyTorch中实现异常值鲁棒的回归模型
  • 视觉问答新挑战:OK-VQA数据集深度解析与常见问题避坑指南
  • 造相-Z-Image惊艳案例:超写实静物摄影风格(金属反光/玻璃通透感/布料褶皱)
  • 如何从初级程序员成长为高级工程师?
  • 通义千问2.5-7B-Instruct问题解决:部署常见错误及解决方法汇总