关于在ts中使用最新版redux的方法记录

news2025/2/27 16:44:49

1.首先在react-ts项目中引入redux&react-redux

npm i  --save redux  react-redux

2.redux文件及目录建设

3.文件说明

Store.ts:为入口文件
reducers: 为多个reducer独立文件,并且每个reducer都设置自己的类型注解文件

代码展示如下:

//Store.ts

/**
rtk的configureStore集成了redux中的combineReducers,createStore,middleware以及默认支持reduxDevTools;
*/
import { configureStore } from "@reduxjs/toolkit";

//reducer引入
import CollapsedReducer  from "./reducers/collapsed/CollapsedReducer";

const store = configureStore({
    reducer:CollapsedReducer
});
export default store;

/**
 * returnType:可以获取返回值的类型,使代码更具可维护性和可读性,
 * 特别是在处理复杂的函数类型时,可以减少手动定义类型的工作,
 * 同时增加了代码的类型安全性。它在编写高度类型化的代码或使用泛型函数时特别有用。
 * */
export type AppDispatch = typeof store.dispatch; //获取修改方法
export type RootState = ReturnType<typeof store.getState>; //获取设置的状态变量
//CollapsedReducer.ts

/**
PayloadAction:是 Redux Toolkit 中的一个类型,它用于定义 action 的结构以及传递给 reducer 的数据
**/
import { createSlice ,PayloadAction} from "@reduxjs/toolkit";
import { CollapsedState } from "./interface";

const initialState:CollapsedState = {
    isCollapsed: false,
}

//createSlice:创建切片对象
const CollapsedReducerSlice = createSlice({
    name:"CollapsedReducer", //唯一标识
    initialState,   //初始化状态数据
    reducers:{      //1.定义reducers
        //2.定义reducer更新状态数据的函数 ,setisCollapsed方法在后期组件中执行dispatch时是作为action函数的函数名去使用
        setisCollapsed(state,{ payload }: PayloadAction<CollapsedState>){ //传入两个参数1state(代理的proxy对象),一个是action
            console.log(state,"state");
            console.log(payload,"payload");
            state.isCollapsed = payload.isCollapsed
        }
    }
})

export const {
    setisCollapsed
} = CollapsedReducerSlice.actions ;

export default CollapsedReducerSlice.reducer;



//interface.ts
export interface CollapsedState{
    isCollapsed:boolean
}

关于定义hooks.ts文件的初衷:

        因为当我准备在组件中使用cosnt isCollapsed = useSelector((state)=>state.isCollapsed)时会出现报错警告:'state' is of type 'unknown';

这个错误信息 "'state' 的类型为 'unknown'" 表示 TypeScript 无法推断你的 Redux 存储中的状态的类型。这可能是因为你没有正确定义 Redux 状态和 reducer 的类型。

        所以最后的解决方案就是对使用状态就行类型注解并

//hooks.ts

import { TypedUseSelectorHook, useSelector,useDispatch } from 'react-redux';
import {AppDispatch, RootState } from "./Store"; // 导入你的 RootState

/**
 * TypedUseSelectorHook:可以·提高代码维护与可读性减少重复类型注解
 * RootState:是数据类型
 * */
export const useAppSelector: TypedUseSelectorHook<RootState> = useSelector; //全局使用useAppSelector
export const useAppDispatch: () => AppDispatch = useDispatch;

~~~~~~~~上述就对redux完成配置~~~~~~~

组件使用:这里为了简单演示将两个组件代码写在了一起,组件1&组件2

//组件1

import {useAppSelector} from "../../redux/hooks";
import {shallowEqual} from "react-redux";

/***
shallowEqual:在组件决定是否被渲染之前,会进行一次浅比较如果该组件依赖的state并没有被更改,不进行渲染
*/
function SideMenu() {
      //获取store值 
   const isCollapsed = useAppSelector(state => state,shallowEqual);
   return(
        <div>{isCollapsed.isCollapsed}</div>
    )
}

//组件2
import { Button } from 'antd';
import {useAppDispatch,useAppSelector} from "../../redux/hooks";
import {setisCollapsed} from "../../redux/reducers/collapsed/CollapsedReducer";
import {shallowEqual} from "react-redux";

function TopHeader(){
    const dispatch = useAppDispatch();
    const { isCollapsed } = useAppSelector(state => state,shallowEqual);
    return(
       <Button
          type="text"
          icon={isCollapsed ? <MenuUnfoldOutlined /> : <MenuFoldOutlined />}
          onClick={() => {
             console.log("111",!isCollapsed)
             dispatch(setisCollapsed({ isCollapsed: !isCollapsed }));
          }}
    )
}

最后千万切记要在项目根节点中设置Provider包裹全局使用store

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

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

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

相关文章

zemax简单非序列光学系统

切换到非序列模式&#xff1a; 建立一个标准面&#xff0c;设置为抛物面&#xff0c;反射 添加灯丝光源&#xff1a; 陈列光线条数是图中蓝色光线的数目&#xff0c;分析光线条数是后续计算用到的光线条数 匝数&#xff08;圈数&#xff09;和长度、曲率半径决定了灯丝光源的形…

【Git】删除本地分支;报错error: Cannot delete branch ‘wangyunuo-test‘ checked out at ‘XXX‘

目录 0.环境 1.问题描述 2.解决步骤 1&#xff09;使用命令切换到其他分支 2&#xff09;查看当前本地所有分支 3&#xff09;删除“wangyunuo-test”分支 0.环境 windows 11 64位 Git VScode跑代码 1.问题描述 在做项目过程中&#xff0c;想删除一个本地分支“wangyun…

下载JDK及配置环境变量

Oracle网址 Java Downloads | Oracle 环境变量的配置 1. 在系统变量中新建名 JAVA_HOME 的变量 值为你jdk按照的文件目录 2. 在系统变量里面新建一个CLASSPATH变量&#xff0c;其变量值如下图所示&#xff08;此处需要注意&#xff1a;最前面有一个英文状态下的小圆点&#x…

git branch 分支

分支的定义 一个分支是git一个可移动的指针&#xff0c;指向某次提交。每次提交后&#xff0c;当前分支指针就往前挪一个&#xff0c;挪到最新的提交上。 HEAD 指向当前活动的分支 master 默认分支名 &#xff08;git init命令 默认创建它&#xff09; 常见分支指令 创建一个…

电子元器件采购的数字化转型:智能采购工具的应用

电子元器件采购的数字化转型是采购领域的一项重要趋势&#xff0c;智能采购工具的应用在此过程中发挥了关键作用。以下是智能采购工具在电子元器件采购数字化转型中的应用方面的一些关键点&#xff1a; 供应链可见性&#xff1a; 智能采购工具可以提供对供应链的实时可见性。通…

晶尔忠产业集团全面启动暨表彰大会

八月下旬&#xff0c;三伏已尽&#xff0c;初秋遂至。夏日的余热还没有完全散去&#xff0c;初秋的热浪随之席卷而来&#xff0c;大地依旧绿意盎然&#xff0c;万物正是生长最猛烈的时期&#xff0c;为秋天的收获做最后的冲刺&#xff0c;这是一个充满生机的时节&#xff0c;也…

java:操作session

概念 服务器端会话技术&#xff0c;在一次会话的多次请求间共享数据&#xff0c;将数据保存在服务器端的对象中。 一次会话&#xff1a;网页只要不关闭就是一次会话&#xff0c;关闭后会话结束。 示例&#xff1a;会话共享 如下两个Servlet&#xff0c;在浏览器访问 sessio…

【MySQL】事务 详解

事务 详解 一. 为什么使用事务二. 事务的概念三. 使用四. 事务的特性原子性&#xff08;Atomicity&#xff09;一致性&#xff08;Consistency&#xff09;隔离性&#xff08;Isolation&#xff09;持久性&#xff08;Durability&#xff09; 五. 事务并发所带来的问题脏读问题…

git 给分支添加描述

需求:分支多了不知道当前分支的用处可以使用git br用来描述 效果: 全局安装命令 npm i -g git-br 项目内使用 git br 给f-230825-4-zhou分支备注 git config branch.f-230825-4-zhou.description 用来开发第四迭代需求 再次git br查看效果

如何运用智能客服系统进行有效的客服分配?

企业竞争从最开始的拼竞争、拼功能到后来拼服务&#xff0c;现在又越来越多企业开始在客户体验方面展开竞争&#xff0c;谁能给客户带来优质的体验&#xff0c;谁赢得未来市场的可能性就更大。智能客服系统的应用则为企业提高客户服务质量贡献了大份力&#xff0c;其能够对客服…

华为云云服务器评测|老用户回归的初印象

华为云云服务器评测&#xff5c;老用户回归的初印象 前言一、新面孔1. 云耀云服务器2. 服务器特色 二、上手感官体验1. 性价比感受2. 推荐宝塔面板3. CloudShell登录4. 安全性 总结 前言 其实笔者接触华为云已经很久了&#xff0c;第一次使用的云服务器就是华为云。当时还是刚…

【AI】《动手学-深度学习-PyTorch版》笔记(二十二):单发多框检测(SSD)

AI学习目录汇总 1、介绍 SSD(Single Shot MultiBox Detector)单发多框检测。“Single shot”说明SSD算法属于one-stage(一段式)方法,“MultiBox”说明SSD是多框预测(多尺度锚框/特征图)。 SSD和YOLO一样都是采用CNN网络执行one-stage(一段式)检测,区别是: YOLO速…

【SpringMVC】参数传递与用户请求和响应

目录 一、Postman 工具使用 1.1 Postman安装 1.2 Postman的使用 1.2.1 创建WorkSpace工作空间 1.2.2 创建请求 二、参数传递 2.1 添加 Slf4j 依赖 2.2 普通传参 知识点1&#xff1a;RequestMapping 知识点2&#xff1a;RequestParam 2.3 路径传参 知识点3&#xff1…

Vue2电商前台项目——项目的初始化及搭建

Vue2电商前台项目——项目的初始化及搭建 Vue基础知识点击此处——Vue.js 文章目录 Vue2电商前台项目——项目的初始化及搭建一、项目初始化1、脚手架目录介绍2、项目的其他配置 二、项目的路由分析及搭建1、项目的路由分析2、开发项目的步骤3、非路由组件的搭建4、路由组件的搭…

大数据下的精准营销获客

2012年以后&#xff0c;大数据&#xff08;big data&#xff09;一词越来越多地被提及&#xff0c;人们用它来描述和定义信息爆炸时代产生的海量数据&#xff0c;并命名与之相关的技术发展与创新。哈佛大学社会学教授加里金说“这是一场革命&#xff0c;庞大的数据资源使得各个…

通过 Blob 对二进制流文件下载实现文件保存下载

原理&#xff1a;前端将二进制文件做转换实现下载: 请求后端接口->接收后端返回的二进制流(通过二进制流&#xff08;Blob&#xff09;下载,把后端返回的二进制文件放在 Blob 里面)->再通过file-saver插件保存 页面上使用&#xff1a; <span click"downloadFil…

企业工程项目管理系统源码(三控:进度组织、质量安全、预算资金成本、二平台:招采、设计管理)

工程项目管理软件&#xff08;工程项目管理系统&#xff09;对建设工程项目管理组织建设、项目策划决策、规划设计、施工建设到竣工交付、总结评估、运维运营&#xff0c;全过程、全方位的对项目进行综合管理 工程项目各模块及其功能点清单 一、系统管理 1、数据字典&am…

云原生架构如何助力大数据和AI技术在软件开发中的深度整合

文章目录 1. 云原生架构简介2. 大数据与云原生的融合a. 弹性计算和存储b. 容器化大数据应用c. 数据湖和数据仓库 3. AI与云原生的深度融合a. 弹性AI模型训练b. 容器化AI应用c. 自动化部署和监控 4. 对软件开发的影响a. 更快的开发周期b. 更低的成本c. 更高的灵活性和可伸缩性 5…

Activiti7工作流引擎:节点动态跳转

Activiti7中并没有实现从一个UserTask跳转到另一个UserTask&#xff0c;要实现节点之间自由跳转&#xff0c;需要通过自定义命令来实现。 Activiti7实现主要使用了命令模式(Command)和责任链模式(Intercepter)。 命令模式&#xff1a;主要是将每个操作封装成一个命令。如&…

什么是回调函数?写出一个示例?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 回调函数⭐ 示例⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前…