Redux的使用方法,目前借助的是reduxjs/toolkit redux工具

@1 第一步 安装redux的插件:  npm i @reduxjs/toolkit react-redux

@2 第二步 创建store文件夹下创建index.ts文件

import {configureStore} from '@reduxjs/toolkit'  const store = configureStore({ // 创建store实例对象reducer:{}
})export default store // 对外暴露导出

@3 第三步 index.ts入口文件中导入store,用Provider标签进行包裹App跟组件把数据传递@

import React from 'react'
import ReactDOM from 'react-dom/client'
import {HashRouter} from 'react-router-dom'
import {Provider} from 'react-redux'
import store from '@/store' // 导入store
import App from '@/App'
import '@/assets/css/index.less'
const root = ReactDOM.createRoot(document.getElementById('root') as HTMLElement)
root.render(// provider  用來传递store的数据// HashRouter 表示hash模式<Provider store={store}><HashRouter><App></App></HashRouter></Provider>
)

@4 redux的模块化开发,在store文件下创建modules的文件夹下创建测试的counter.ts的文件

// 第一步 导入切片
import {createSlice} from '@reduxjs/toolkit'
// 第二步 创建切片的实例对象 包含切片的名称 数据 行为
const counterSlice = createSlice({name:'counter',initialState:{count:10,message:'hello word'},reducers:{// 修改数据的方法changeMessageAction(state,{payload}){state.message = payload}}
})
export const {changeMessageAction} = counterSlice.actions // 向外导入修改数据的方法
export default counterSlice.reducer // 向外导出数据

@5 将counter.ts文件导入到store的index.ts文件中合并使用:

import {configureStore} from '@reduxjs/toolkit' 
import counterReducer from './module/counter'
import {useSelector,TypedUseSelectorHook,useDispatch} from 'react-redux'
const store = configureStore({reducer:{counter:counterReducer}
})
export default store

 @6 在App跟组件中使用store的数据,此刻会面临到state类型校验的错误 

// 在组件内部 使用useSelector 和useDispatch 获取store的数据和调用修改数据的方法
import {useSelector,shallowEqual,useDispatch} from 'react-redux'
const App = ()=>{const {count,message} = useSelector((state)=>state.counter,shallowEqual) // shallowEqual 阻止多次加载console.log(count,message)// 派发store里面的方法const disPatch = useDispatch()const handlerChangeMessage = ()=>{disPatch(changeMessageAction('hello React'))}return (<div>{count}-{message}</div>)
}

@7 解决state类型错误的问题重写useSelectore 和 useDispatch ;

import {configureStore} from '@reduxjs/toolkit' 
import counterReducer from './module/counter' // 导入子模块的store数据
import {useSelector,TypedUseSelectorHook,useDispatch} from 'react-redux'
const store = configureStore({reducer:{counter:counterReducer}
})// 解决useSelector的类型
type GetStateFnType = typeof store.getState
export type IRootState = ReturnType<GetStateFnType>
export const useAppSelector:TypedUseSelectorHook<IRootState> = useSelector
// 解决useSelector的类型// 解决useDispatch的类型
type DispatchType = typeof store.dispatch
export const useAppDispatch:()=> DispatchType = useDispatch
// 解决useDispatch的类型export default store

@8 在组件中使用 修改后的useAppDispatch 和useAppSelector 解决state类型的问题

import React,{Suspense,useState} from 'react'
import {useRoutes,Link} from 'react-router-dom' // 创建一级路由出口
import {useSelector,shallowEqual,useDispatch} from 'react-redux'
import routes from './router' // 导入的路由规则
import {useAppSelector,useAppDispatch} from '@/store/index' // state的类型规范
import {changeMessageAction} from '@/store/module/counter'
function App() {// 这里面临问题 定义 state的类型const {count,message} = useAppSelector((state)=>state.counter,shallowEqual) // shallowEqual 阻止多次加载console.log(count,message)// 派发store里面的方法const disPatch = useAppDispatch()const handlerChangeMessage = ()=>{disPatch(changeMessageAction('hello React'))}return <div></div>
}


 

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

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

相关文章

pod控制器的作用

pod控制器的作用 1、动态pv和pvc deployment是控制器 pod空气器:工作负载&#xff0c;workload用于管理pod的中间层&#xff0c;确保podi资源符合预期的状态 预期状态 1、副本数 2、容器重启策略 3、镜像拉取策略 pod、出现故障时重启等等 pod的控制器类型 1、replic…

QT-文件夹与文件操作/QDir/QFile

本文目录 判断文件夹是否存在创建文件夹删除文件夹创建文件删除文件 判断文件夹是否存在 下面的代码判断E盘下ABC文件夹是否存在&#xff0c;注意斜杠&#xff0c;不要写反了 #include <QDir>int main(int argc, char *argv[]) {QDir dir("E:/ABC");if(!dir.…

删除运行框中的文件打开历史记录

当我们使用everything、百度、迅雷等软件&#xff0c;在列表中右键选中打开文件夹时。 当使用 winR 快捷键等方式打开运行时&#xff0c;输入盘符会出现之前打开过的文件夹&#xff0c; 一方面展示的特别多会比较混乱&#xff0c;另一方面 记得在之前的window版本中&#xff08…

WIFI7时代正式来临

Wi-Fi联盟在2024年1月8日宣布推出了Wi-Fi CERTIFIED 7认证&#xff0c;标志着WIFI7时代的正式来临&#xff01;这一认证引入了一系列强大的新功能&#xff0c;旨在提升Wi-Fi性能并改善各种连接环境。WIFI7支持多用户AR/VR/XR、沉浸式3D培训、电子游戏、混合工作、工业物联网和汽…

架构师之超时未支付的订单进行取消操作的几种解决方案

今天给大家上一盘硬菜&#xff0c;并且是支付中非常重要的一个技术解决方案&#xff0c;有这块业务的同学注意自己尝试一把哈&#xff01; 一、需求如下&#xff1a; 生成订单30分钟未支付&#xff0c;自动取消 生成订单60秒后,给用户发短信 对上述的需求&#xff0c;我们给…

【算法与数据结构】63、LeetCode不同路径 II

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;参考【算法与数据结构】62、LeetCode不同路径的题目&#xff0c;可以发现本题仅仅是多了障碍物。我们还…

springboot下载图片的简单处理方式

参考地址 springboot&#xff1a;各种下载文件的方式_springboot下载文件-CSDN博客 开箱即用实战 GetMapping("/t1")public void down1(HttpServletResponse response) throws Exception {response.reset();response.setContentType("application/octet-strea…

STM32F103标准外设库——认识STM32(一)

个人名片&#xff1a; &#x1f981;作者简介&#xff1a;一名喜欢分享和记录学习的在校大学生 &#x1f42f;个人主页&#xff1a;妄北y &#x1f427;个人QQ&#xff1a;2061314755 &#x1f43b;个人邮箱&#xff1a;2061314755qq.com &#x1f989;个人WeChat&#xff1a;V…

A. Tricky Sum

CF 的第一场教育场次是2015年11月13日&#xff0c;准备从第一场教育场开始写A,B,C题 在page13,现在教育场更新到了160 先从A开始刷 #include<bits/stdc.h> using namespace std;bool check(long long a) {if(a%2!0) return false;while(a%20){a/2;}if(a1) return true;…

C++学习笔记(三十四):c++ array

本节介绍c标准库模板中的array和c风格的array的区别&#xff0c;及什么时候使用std::array。 #include <iostream> #include <array>template<int N> void PrintArray(std::array<int,N> array) {for (int i 0; i < array.size(); i){std::cout &l…

事务问题处理

需求&#xff1a; 新建一个通知&#xff0c;通知下面选择需要通知到的通知人&#xff0c;要求通知发送的时候如果通知发送失败&#xff0c;不能新建通知和具体的通知人关系。发送某个人失败&#xff0c;要求通知成功建立&#xff0c;其他人成功发送则建立通知和通知人的关系&a…

MySQL存储引擎索引事务

一.存储引擎 1.创建的存储引擎 MyISAM 不支持事务、也不支持外键&#xff0c;索引采用非聚集索引&#xff0c;其优势是访问的速度快&#xff0c;对事务完整性没有要求&#xff0c;以 SELECT 、 INSERT 为主的应用基本上都可以使用这个存储引擎来创建表。 MyISAM 的表在磁盘上…

从零学Java 线程的状态

Java 线程的状态 文章目录 Java 线程的状态线程的基础状态1 常见方法1.1 休眠1.2 放弃1.3 加入1.4 优先级1.5 线程打断1.6 守护线程1.7 线程的状态 - 等待 2 线程安全问题2.1 线程同步: 同步代码块2.2 线程同步: 同步方法2.3 同步规则2.4 线程的状态 - 阻塞2.5 特殊现象: 死锁 …

新版网易滑块

突然发现脸皮厚根本没用&#xff0c;大冬天的&#xff0c;风吹过来还是会冷。 大哥们多整件衣裳&#xff0c;好冷&#xff01;&#xff01;&#xff01;&#xff01; 网易更新了&#xff0c;这俩 dt跟f值。 dt为 这里返回的&#xff0c;忽略掉他。 data参数中的d值&#xff…

未来气膜体育馆的发展趋势是什么?

未来气膜体育馆的发展趋势是多方面的&#xff0c;以下是其中几个方面的趋势。 起初&#xff0c;随着人们对体育运动的需求不断增加&#xff0c;气膜体育馆的建设和使用将成为一种趋势。气膜体育馆具有灵活性和可移动性的特点&#xff0c;可以快速搭建和拆除&#xff0c;能够适…

低代码平台,新型应用程序开发神器

目前低代码平台如火如荼。这一新兴技术为企业提供了一种高效、灵活、快速开发应用程序的方法&#xff0c;并在短时间内取得了巨大成功。然而&#xff0c;我们不得不面对低代码平台的优劣以及其所带来的挑战。本文将深入探讨低代码平台在不同情况下的优劣势&#xff0c;并与您分…

Matlab | Matlab在线性代数中的应用(附matlab代码算例)

===================================================== github:https://github.com/MichaelBeechan CSDN:https://blog.csdn.net/u011344545 ===================================================== Matlab在线性代数中的应用 1 向量组的线性相关性2 线性方程组3 相似矩阵…

AI能否真的取代程序员?

一个Java程序员从接到需求到最终开发完功能的流程大致如下 首先是理解原型图&#xff0c;设计表结构根据表结构编写增删改查代码与前端联调&#xff0c;完成功能开发 那么以上步骤AI能不能完成呢&#xff1f; 让我们试一下&#xff1a; 第一步&#xff0c;使用 AI助手 解析流…

设计模式之状态模式【行为型模式】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档> 学习的最大理由是想摆脱平庸&#xff0c;早一天就多一份人生的精彩&#xff1b;迟一天就多一天平庸的困扰。各位小伙伴&#xff0c;如果您&#xff1a; 想系统/深入学习某…

postman环境变量全局变量设置

postman环境变量、全局变量设置 在公司中&#xff0c;一般会存在开发环境、测试环境、线上环境等&#xff0c;如果需要在不 同的环境下切换做接口测试&#xff0c;显然我们需要把所有接口的域名进行修改&#xff0c;如果接 口测试用例较多&#xff0c;那么修改会非常费力&…