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

React的Redux的状态管理

步骤

1.创建新项目

npx create-react-app react-redux

2.安装配套工具

npm i @reduxjs/toolkit react-redux

3.启动项目

npm run start

4.在src目录下创建store文件夹

5.在store文件夹下创建modules文件夹

6.在store文件夹里创建index.js文件

7.在counterStore.js文件里编写子store(使用React Toolkit 创建 counterStore)

// createSlice  是为了创建store用的
import { createSlice} from "@reduxjs/toolkit"const counterStore= createSlice({// 模块name:'counter',// 初始化state(状态)initialState:{count:0},//(修改状态的方法) 编写书写数据的方法,同步方法,支持直接修改reducers:{inscrement(state){state.count++;},decrement(state){state.count--;},inscrementTen(state,actions){console.log("actions",actions);state.count= state.count+actions.payload;},// action传递对象actionObg(state,actions){console.log("测试传递对象",actions);}}
})
// 解构出来actionCreater函数
const {inscrement,decrement,inscrementTen,actionObg} =counterStore.actions;
// 获取reducer
const counterReducer = counterStore.reducer
// 以按需导出的方式导出actionCreater
export {inscrement,decrement,inscrementTen,actionObg}
// 以默认导出的方式发哦出reducer
export default counterReducer;

8.在store文件夹的index.js里组合moudels里的子模块,并导出store

import { configureStore } from "@reduxjs/toolkit";
// 导入子模块reducer (counterReducer,channelReducer  这俩名称是counterStore.js和chaenlStore.js最后一行导出来的名称)
import counterReducer from './modules/counterStore'
import channelReducer from "./modules/chaenlStore";// 创建子组合模块
// 根store
const store =configureStore({reducer:{counter:counterReducer,channel:channelReducer}
})
export default store 

9.在src文件夹下的index.js文件里   为React注入store

// 使React
import store from './store';
// 导出;来的Provider  用于下面标签里
import {Provider} from 'react-redux'
const root = ReactDOM.createRoot(document.getElementById('root'));root.render(<React.StrictMode>{/* 注入store   Provider标签很重要 */}<Provider store={store}><App /></Provider></React.StrictMode>
);
10.React组件使用store中的数据

在React组件中使用store中的数据,需要用到一个钩子函数-useSelector,它的作用是把store中的数据映射到组件中

useDispatch是React-Redux库提供的一个钩子函数,它用于访问Redux store的dispatch函数。useDispatch可以让你从函数组件中派发actions。

app.js文件


// useSelector  获取store里面 变量
// useDispatch作用可以修改store里面变量
import {useSelector,useDispatch} from 'react-redux'
// 导入actionCreater
import { decrement,inscrement,inscrementTen,actionObg } from './store/modules/counterStore'; 

function App() {// 使用回调函数state拿到任意一个模块  counter和channel  名称来自strore文件夹下的index.js文件里绑定的模块名const {count} =useSelector(state => state.counter)const {channelList}= useSelector(state=>state.channel)const dispatch=useDispatch();// 使用useEffect触发异步接口调用   [dispatch]  的意思是调用dispatch一次执行一次useEffect(()=>{dispatch(fetchChannlList());},[dispatch])return (<div className="App"> <button onClick={()=>dispatch(decrement())}>-</button>alksdfn---{count}<button onClick={()=>dispatch(inscrement())}>+</button><button onClick={()=>dispatch(inscrementTen(10))}>+10</button><button onClick={()=>dispatch(actionObg({'age':10,'qie':20}))}>提交action传递对象</button><ul>{channelList.map((item,index)=><li key={item.id}>{item.name}</li>)}<li></li></ul></div>);
}export default App;

修改Store里面变量的唯一方法就是提交一个action

redux异步从后台获取数据

安装Axios异步请求库、

npm i axios

谷歌插件调试React项目

插件下载地址(https://chromewebstore.google.com/detail/lmhkpmbekcpmknklioeibfkpmmfibljd)

相关文章:

  • 如何处理Android应用程序的内存泄漏
  • 聊聊 Mybatis 动态 SQL
  • 【推荐100个unity插件之21】unity实现多语言切换功能——Localization插件的使用
  • 命名冲突常见的领域
  • 红队内网攻防渗透:内网渗透之内网对抗:隧道技术篇防火墙组策略ICMPDNSSMB协议出网判断C2上线解决方案
  • 利用第三方服务对目标进行被动信息收集防止被发现(web安全白帽子)
  • 剪画音频提取:周杰伦音乐自由听,谁还付费听歌呀!
  • 6G时代,即将来临!
  • 课程管理系统
  • Stable Diffusion部署教程,开启你的AI绘图之路
  • Qt项目天气预报(4) - json 数据解析
  • 可灵王炸更新,图生视频、视频续写,最长可达3分钟!Runway 不香了 ...
  • 【FreeRTOS】删除任务 用遥控器控制音乐
  • Linux中的TCP与UDP:理解两者的差异
  • 生活实用口语柯桥成人外语培训机构“客服”用英文怎么说?
  • 《Javascript高级程序设计 (第三版)》第五章 引用类型
  • 0基础学习移动端适配
  • Android开源项目规范总结
  • canvas 绘制双线技巧
  • Cookie 在前端中的实践
  • JavaScript设计模式与开发实践系列之策略模式
  • Java应用性能调优
  • Js基础知识(一) - 变量
  • ng6--错误信息小结(持续更新)
  • Vue--数据传输
  • Vue源码解析(二)Vue的双向绑定讲解及实现
  • Vue组件定义
  • 翻译 | 老司机带你秒懂内存管理 - 第一部(共三部)
  • 聊一聊前端的监控
  • 前端每日实战:61# 视频演示如何用纯 CSS 创作一只咖啡壶
  • 如何选择开源的机器学习框架?
  • 微信小程序设置上一页数据
  • 最近的计划
  • #我与Java虚拟机的故事#连载12:一本书带我深入Java领域
  • (2024,RWKV-5/6,RNN,矩阵值注意力状态,数据依赖线性插值,LoRA,多语言分词器)Eagle 和 Finch
  • (4)(4.6) Triducer
  • (C#)获取字符编码的类
  • (C语言)输入自定义个数的整数,打印出最大值和最小值
  • (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作...
  • (function(){})()的分步解析
  • (附源码)springboot“微印象”在线打印预约系统 毕业设计 061642
  • (经验分享)作为一名普通本科计算机专业学生,我大学四年到底走了多少弯路
  • (每日一问)设计模式:设计模式的原则与分类——如何提升代码质量?
  • (南京观海微电子)——COF介绍
  • (一)C语言之入门:使用Visual Studio Community 2022运行hello world
  • (转)linux下的时间函数使用
  • (转)平衡树
  • *(长期更新)软考网络工程师学习笔记——Section 22 无线局域网
  • ***详解账号泄露:全球约1亿用户已泄露
  • *Algs4-1.5.25随机网格的倍率测试-(未读懂题)
  • .net core 管理用户机密
  • .net 调用php,php 调用.net com组件 --
  • .NET 反射 Reflect
  • .NET 线程 Thread 进程 Process、线程池 pool、Invoke、begininvoke、异步回调
  • .NET项目中存在多个web.config文件时的加载顺序