reduxjs/toolkit的使用

news2024/12/23 17:44:01

用法:
下载包进行安装,store主入口,hooks简化store(复制粘贴进去即可),slice相当于store中的模块化,最后在页面根入口导入store,并使用即可

1、安装

npm install @reduxjs/toolkit react-redux -D

2、目录结构

store.ts

import { configureStore } from '@reduxjs/toolkit'
import userSlice from './slice/userSlice';
import mySlice from './slice/mySlice';

export  const store = configureStore({
    reducer: {
        userSlice,
        mySlice
    },
    middleware:getDefaultMiddleware => getDefaultMiddleware({
        //关闭redux序列化检测, 异步函数请求接口时,返回的对象无法序列化
        serializableCheck:false
    })

})

// 从 store 本身推断出 `RootState` 和 `AppDispatch` 类型
export type RootState = ReturnType<typeof store.getState>
// 推断出类型: {posts: PostsState, comments: CommentsState, users: UsersState}
export type AppDispatch = typeof store.dispatch

hooks.ts

import { TypedUseSelectorHook, useDispatch, useSelector } from 'react-redux'
import type { RootState, AppDispatch } from './store'

// 在整个应用程序中使用,而不是简单的 `useDispatch` 和 `useSelector`
export const useAppDispatch: () => AppDispatch = useDispatch
export const useAppSelector: TypedUseSelectorHook<RootState> = useSelector

slice.ts

import { PayloadAction, createAsyncThunk, createSlice } from "@reduxjs/toolkit";
import axios from 'axios';
const initialState:{
    userId:string
}  = {
    userId:"1"
}
export const userSlice = createSlice({
    name:"user",
    initialState,
    reducers:{
        increment:(state,action:PayloadAction<string>)=>{
            console.log(action)
            state.userId = action.payload
        }
    },
    extraReducers:(build)=>{
        // 异步请求fulfilled后要做的事
        build.addCase(getApiInfo.fulfilled,(state,action)=>{
            state.userId = action.payload.data.data.id;
        });
        build.addCase(getApiInfo2.fulfilled,(state,action)=>{
            state.userId = action.payload.data.data.id;
        })
    }
});
// 异步请求
export const getApiInfo = createAsyncThunk('getApi', async()=>{
    const info = await axios('https://13123/111/22',{
        method:'POST',
        headers:{
            "Sessionid":""
        }
    });
    return info
});
export const getApiInfo2 = createAsyncThunk('bbbbbbbb', async()=>{
    const info = await axios('https://13123/111/22',{
        method:'POST',
        headers:{
            "Sessionid":""
        }
    });
    return info
})
export const { increment } = userSlice.actions;
export default userSlice.reducer

index.tsx(页面入口处)

import { createRoot } from 'react-dom/client';
import RouterRender from './router/RouterRender';
import { RouterProvider } from 'react-router-dom';
import { Provider } from 'react-redux';
import { store } from '@/redux/store'
const root = createRoot(
    document.getElementById('root') as HTMLElement
);
root.render(
    <Provider store={store}>
        <RouterProvider router={RouterRender}></RouterProvider>
    </Provider>
);

完工

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

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

相关文章

【网络编程】传输层——TCP协议

文章目录 TCP协议TCP协议格式窗口大小六个标志位确认应答机制超时重传机制连接管理机制三次握手四次挥手 流量控制滑动窗口拥塞控制延迟应答捎带应答面向字节流粘包问题TCP异常情况TCP小结基于TCP的应用层协议TCP与UDP的对比 TCP相关实验CLOSE_WAIT状态实验TIME_WAIT状态实验TI…

为你提供5个解决“找不到msvcp120.dll无法继续执行代码”

在使用电脑计算机运行软件时&#xff0c;我们可能会遇到一些错误提示&#xff0c;其中之一就是“找不到msvcp120.dll无法继续执行代码”。这个问题通常是由于缺少相应的运行库文件或者文件损坏导致的。下面我将为你提供5个解决方法&#xff0c;帮助你解决这个问题。 第1个方法.…

​软考-高级-信息系统项目管理师教程 第四版【第18章-项目绩效域-思维导图】​

软考-高级-信息系统项目管理师教程 第四版【第18章-项目绩效域-思维导图】 课本里章节里所有蓝色字体的思维导图

MATLAB画图由于线段太多导致导出图片模糊的解决办法

Matlab画图如果figure内的线条过多&#xff0c;或者散点过多&#xff0c;导出的图片会模糊&#xff0c;解决方案 解决方法就在于figure的导出设置中。 在设置的渲染选项中&#xff0c;渲染器有两个&#xff0c;分别为painters和OpenGL&#xff0c;分别为矢量格式输出和位图输出…

【原创】java+swing+mysql爱心捐赠管理系统设计与实现

摘要&#xff1a; 爱心捐赠管理系统旨在管理和优化捐赠过程&#xff0c;提高效率&#xff0c;增强透明度&#xff0c;并鼓励更多的个人和企业参与公益捐赠&#xff0c;用户可以捐款或者捐物。本系统采用javaswing界面可视化技术&#xff0c;数据库使用mysql。 功能分析&#…

数据库的进阶增删查改操作(一)

进阶操作 一.约束1.约束类型2.NULL约束3.unique:唯一约束4.default:默认值约束5.primary key:主键约束6.foreign key:外键约束7.check约束(了解内容) 二.表的设计1.一对一2.一对多3.多对多 三.新增四.查询1.聚合函数1.1 count1.2 sum1.3 avg1.4 max1.5 min 2.group by 字句3.ha…

win10虚机扩容C盘

需求&#xff1a; 在虚机管理平台上&#xff0c;将win10虚机的C盘空间扩容至200G&#xff0c;当前空间为100G 操作步骤 1.在虚机平台上&#xff0c;将硬盘1的大小增加至200G 如下图 点击保存&#xff1b; 查看win10虚机&#xff0c;发现C盘空间还是100G&#xff0c;如下图…

【WinForm详细教程八】WinForm中的TreeView控件

文章目录 TreeView 基本的知识属性方法事件 TreeView 案例演示案例一&#xff1a;案例二&#xff1a; TreeView 控件 用于展示分层数据&#xff0c;它以树形结构展示信息&#xff0c;每个节点可以有一个或多个子节点。TreeView 控件允许用户以可展开和可折叠的形式查看复杂的层…

josef约瑟低电压继电器 DY-110 10-109V 辅助电源·DC110V 嵌入式面板安装

DY-110/110V电压继电器 系列型号 DY-110电压继电器&#xff1b;GY-110电压继电器&#xff1b; GDY-110电压继电器&#xff1b;DY-110/AC电压继电器&#xff1b; GY-110/AC电压继电器&#xff1b;GDY-110/AC电压继电器&#xff1b; DL-110电压继电器&#xff1b;GL-110电压…

代码随想录 Day39 动态规划 LeetCode T139 单词拆分 动规总结篇1

前言 在本期开始之前,让我们再回顾一下动规五部曲,并且今天的任务只有一道题,我们顺便也回顾一下之前学过的知识点,动规的前面集中化题型,0-1背包,完全背包,以及很多种遍历顺序,让秋秋和大家娓娓道来. 首先我们回顾一下动态规划的动规五部曲. 1.明确dp数组的元素含义 2.明确dp数…

技术分享 | app自动化测试(Android)--触屏操作自动化

导入TouchAction Python 版本 from appium.webdriver.common.touch_action import TouchAction Java 版本 import io.appium.java_client.TouchAction; 常用的手势操作 press 按下 TouchAction 提供的常用的手势操作有如下操作&#xff1a; press 按下 release 释放 …

Python高级进阶(1)----深入理解Python迭代器与生成器

文章目录 1. 迭代器协议代码示例:2. 生成器基础代码示例:3. 使用yield的高级技巧代码示例:4. 生成器表达式代码示例:迭代器和生成器是Python中实现迭代的两种主要方式,它们都允许用户创建可以遍历数据集的对象。在Python中,迭代器协议是指对象需要遵守__iter__()和__next…

05【保姆级】-GO语言的标识符

之前我学过C、Java、Python语言时总结的经验&#xff1a; 先建立整体框架&#xff0c;然后再去抠细节。先Know how&#xff0c;然后know why。先做出来&#xff0c;然后再去一点点研究&#xff0c;才会事半功倍。适当的囫囵吞枣。因为死抠某个知识点很浪费时间的。对于GO语言&a…

Java开发注意事项和细节说明

&#x1f468;‍&#x1f393;&#x1f468;‍&#x1f393;博主&#xff1a;发量不足 个人简介&#xff1a;耐心&#xff0c;自信来源于你强大的思想和知识基础&#xff01;&#xff01; &#x1f4d1;&#x1f4d1;本期更新内容&#xff1a;Java开发注意事项和细节说明&…

项目部署之安装和配置Canal

1.Canal介绍 Canal是阿里巴巴的一个开源项目&#xff0c;基于java实现&#xff0c;整体已经在很多大型的互联网项目生产环境中使用&#xff0c;包括阿里、美团等都有广泛的应用&#xff0c;是一个非常成熟的数据库同步方案&#xff0c;基础的使用只需要进行简单的配置即可。 …

HelpLook VS HelpDocs:知识库工具一对一比较

您是否正在寻找比HelpDocs更好的替代方案&#xff1f;您是否希望使用功能更强大的类似工具&#xff1f;HelpDocs是一款简单易用的知识库软件&#xff0c;可以在一个集中的位置创建、托管和监控自助服务门户。凭借其模板、原生集成和详细的分析功能提供不错的用户体验。尽管它具…

我在Vscode学OpenCV 图像运算(权重、逻辑运算、掩码、位分解、数字水印)

文章目录 权重 _ 要求两幅图像是相同大小的。[ 1 ] 以数据说话&#xff08; 1&#xff09; 最终&#xff1a;&#xff08; 2 &#xff09;gamma _输出图像的标量值 [ 2 ] 图像的展现力gamma并不等同于增加曝光度&#xff08; 1 &#xff09;gamma100&#xff08; 2 &#xff09…

武器检测YOLOV8NANO

武器检测&#xff08;匕首&#xff0c;步枪&#xff0c;手枪&#xff09;&#xff0c;采用YOLOV8NANO训练&#xff0c;得到pt模型&#xff0c;然后转换成Onnx模型&#xff0c;供OPENCV DNN调用&#xff0c;支持C,PYTHON,ANDROID。有标注的训练集 武器检测YOLOV8NANO

04-react基础知识-路由

一、react路由环境安装 使用指令&#xff1a;npm i --save react-router-dom type/react-router-dom进行react路由环境安装 二、引入路由 在main.jsx文件中引入该语句&#xff1a; import { createBrowserRouter, RouterProvider } from react-router-dom 定义一个变量rou…

Socket 通信

文章目录 Socket 通信创建流程图通信示例对一些概念进行讲述对Socke 编程所用的函数进行讲解 网络通信 和 Socket Socket 通信流程图 &#xff1a; 通信示例 对Socket 编程有一个初步的了解, 看看具体代码是如何实现的. 示例的主要功能: 实现大小写的转化,客户端发送数据 …