### Redux Toolkit介绍*

news2024/11/23 3:26:39

*Redux Toolkit 是官方推荐的编写 Redux 逻辑的方法**。

Redux Toolkit介绍

Redux Toolkit 是官方推荐的编写 Redux 逻辑的方法

在前面我们日常react项目中使用Redux状态管理的时候应该已经发现,redux的编写逻辑过于的繁琐和麻烦。
并且代码通常分拆在多个文件中(虽然也可以放到一个文件管理,但是代码量过多,不利于管理);
Redux Toolkit包旨在成为编写Redux逻辑的标准方式,从而解决上面提到的问题;
在很多地方为了称呼方便,也将之称为“RTK”

redux tookit官网

https://redux-toolkit.js.org/

安装Redux Toolkit

npm install @reduxjs/toolkit react-redux

redux/tookit常用API

configureStore: 包装createStore以提供简化的配置选项和良好的默认值。
它可以自动组合你的 slice reducer,添加你提供 的任何 Redux 中间件,
redux-thunk默认包含,并启用 Redux DevTools Extension。
​
createSlice: 接受reducer函数的对象、切片名称和初始状态值,并自动生成切片reducer,并带有相应的actions。
​
createAsyncThunk: 接受一个动作类型字符串和一个返回承诺的函数,并生成一个pending/fulfilled/rejected基于该承诺分 派动作类型的 thunk

创建store文件

//引入tookit
import { configureStore } from '@reduxjs/toolkit'
//引入reducer slice
import { reducer } from './reducers/user'
//创建store
const store = configureStore({
    //放置单独reducer切片   默认多合一
    reducer: {
        users: reducer
    },
    devTools: true
});
​
export default store;

创建slice切片

//引入reducer
import { createSlice } from '@reduxjs/toolkit'
//创建slice
const userSlice = createSlice({
    name: "User", //切片名称
    initialState: {
        count: 0
    },
    //类似事件类型
    reducers: {
        increment(state, action) {
            console.log(state, action);
            let { payload } = action;
            state.count += payload;
        }
    },
});
​
​
//导出对应的action
export const { increment } = userSlice.actions;
//导出当前的reducer
export const reducer = userSlice.reducer; 

关联到react项目

import React from 'react'
import ReactDOM from 'react-dom/client'
import App from './App'
import './index.css'
import { Provider } from 'react-redux'
import store from './store/index'
​
ReactDOM.createRoot(document.getElementById('root')).render(
  <React.StrictMode>
    <Provider store={store}>
      <App />
    </Provider>
  </React.StrictMode>
​
)

组件中直接使用

import { useDispatch, useSelector } from "react-redux"
import { increment } from './store/reducers/user'
export default () => {
  let state = useSelector(state => state);
  let dispatch = useDispatch();
  console.log(state);
​
  let add = () => {
    //触发动作
    dispatch(increment(1));
  }
  return <>
    <div>测试---{state.users.count}
      <button onClick={add}>++</button>
    </div>
  </>
}

异步的thunk

创建异步的thunk
//引入reducer
import { createSlice, createAsyncThunk } from '@reduxjs/toolkit'
//创建异步thunk
export let userLoginThunk = createAsyncThunk("fetchlogin", async (args) => {
    let res = await 123;
    return res;
});
//创建slice
const userSlice = createSlice({
    name: "User",
    initialState: {
        count: 0
    },
    //类似事件类型
    reducers: {
        increment(state, action) {
            console.log(state, action);
            let { payload } = action;
            state.count += payload;
        }
    },
    //监听异步的结果
    extraReducers: {
        [userLoginThunk.fulfilled](state, action) {
            let { payload } = action;
            console.log(state, payload);
            state.count = payload
        }
    }
});
​
​
//导出对应的action
export const { increment } = userSlice.actions;
//导出当前的reducer
export const reducer = userSlice.reducer; 

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

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

相关文章

使用ChatGPT完成程序开发——目标:不写一行代码完成图像识别并点击

本文作为一个使用AI开发的思路&#xff0c;让更多的人可以利用AI完成一些简单的程序&#xff0c;文中使用的是国内镜像GTP3.5 源码: GitHub - kasimshi/testCV: AI编写的OpenCV图像识别例子 GTP镜像: 知汇 对AI描述我们要做的功能&#xff0c;让它给给初步的思路和方向 作为新…

opencv-python视频分析与目标跟踪

目录 光流 目标跟踪 一、光流 使用OpenCV光流分析&#xff0c;跟踪蚂蚁的轨迹&#xff1a; 代码实现&#xff1a; import numpy as np import cv2if __name__ __main__:cap cv2.VideoCapture(ant.mp4)# ShiTomasi 角点检测参数feature_params dict(maxCorners100,quali…

ConcurrentHashMap底层实现原理

ConcurrentHashMap底层实现原理 ConcurrentHashMap的整体架构ConcurrentHashMap的基本功能ConcurrentHashMap在性能方面的优化 ConcurrentHashMap的整体架构 1.8中的存储结构&#xff1a; 它是由数组、单向链表、红黑树组成的。 当们去初始化一个ConcurrentHashMap实例的时候…

【工具】FFmpeg|超大视频本地有损压缩,500MB变5MB(支持 Windows、Linux、macOS)

参考&#xff1a; 如何将一分钟长的1080p视频压缩至5MB以内&#xff1f;-知乎-滔滔清风近期HEVC扩展备用安装方法-B站-悲剧天下 总共三个步骤&#xff0c;安装FFmpeg、运行指令、打开视频。 亲测 500MB 变 5MB。 1 安装FFmpeg 对于不需要看教程可以自行完成安装的同学们&…

哪款手持洗地机更好用?好用的手持洗地机分享

家居卫生清洁对于每个家庭来说都是必不可少的事情&#xff0c;尤其是地面清洁更是需要重视。传统的清洁方法需要频繁更换工具才能完成吸、拖、吸的清洁步骤&#xff0c;而这个过程费时费力且效果并不尽如人意。然而&#xff0c;洗地机的出现完美地解决了这一问题&#xff0c;将…

【C++进阶之路】初始C++语法(下)

文章目录 一.引用1.基本概念2.使用场景函数参数函数返回值 3.优点4.指针与引用的区别 二.内联函数引入1.默认设置2.建议3.声明与定义&#xff08;不同文件&#xff09;add.cppadd.htest.cpp 三.auto1.必须有初始值2.只能确定一个类型3.auto可以为类型的一部分4.函数参数和自定义…

Ubuntu20.04部署YOLOv5

目录 前言一、环境配置1 显卡驱动安装1.1 卸载显卡驱动1.2 准备工作1.3 驱动安装1.4 验证 2 CUDA安装2.1 准备工作2.2 CUDA下载2.3 CUDA安装2.4 配置环境变量2.5 验证2.6 小结 3 cuDNN安装3.1 cuDNN下载3.2 cuDNN安装3.3 小结 4 TensorRT安装4.1 TensorRT下载4.2 TensorRT安装4…

UOS-----本地YUM源配置

1. cd /etc/apt/sources.list.d/ 将文件中的两个list配置文件内容注释掉&#xff0c;并保存 2. cd /etc/apt/ vi sources.list 将配置文件内容注释 3. cd /etc/apt/sources.list.d/ vi local.list (创建一个新的list文件&#xff0c;作为本地yum配置文件) 添…

电脑怎么压缩图片大小,4个通用方法分享

电脑怎么压缩图片大小&#xff1f;我相信这个问题很多小伙伴都遇到过的。我们压缩图片大小的主要原因是为了优化网站、应用程序或移动设备的性能。大尺寸的图片文件需要更多的存储空间和带宽&#xff0c;这将导致网页加载速度变慢&#xff0c;浪费用户时间并影响用户体验。此外…

香港科技大学有什么好的专业?

香港科技大学创办于1991年10月&#xff0c;是一所坐落于香港清水湾半岛的公立研究型大学。大学设有4个学院&#xff1a;工学院、理学院、人文社会科学学院和工商管理学院&#xff0c;还设有2个研究院&#xff1a;香港科技大学公共政策和行政研究生院和香港科技大学霍英东研究院…

nginx 配置代理ip访问https的域名配置

目录 问题背景 解决方式 正向代理&#xff1a; 反向代理&#xff1a; 通俗点儿一句话&#xff0c;正向与反向的区别&#xff1a; 问题背景 在某些单位或机构内部&#xff0c;访问互联网接口需要通过指定的服务器去访问&#xff0c;那我们就需要通过代理 ip 和 端口去访问外…

云计算基础——虚拟化

虚拟化技术简介 虚拟化是一个广义的术语&#xff0c;在计算机方面通常是指计算元件在虚拟的基础上而不是真实的基础上运行 虚拟化是一种经过验证的软件技术&#xff0c;它正迅速改变着IT的面貌&#xff0c;并从根本上改变着人们的计算方式 虚拟化是一个抽象层&#xff0c;它…

【C++学习】类和对象--运算符重载

运算符重载概念&#xff1a;对已有运算符重新定义&#xff0c;赋予其另一种功能&#xff0c;以适应不同的数据类型。 作用&#xff1a;实现两个自定义数据类型相加的运算。 目录 加号运算符重载 1.成员函数重载 2.全局函数重载 左移运算符重载<< 递增运算符重载 赋值…

java堆排序

堆排序是最基本的排序算法&#xff0c;简单来说就是把一堆数据&#xff08;数组&#xff09;分成两个相等的部分&#xff0c;其中一个部分作为数组的开头&#xff0c;另一个部分作为数组的结尾。之后在对这两个相等的部分进行比较&#xff0c;如果在比较之后发现这个数组中有一…

读懂什么是RDMA

一.什么是RDMA 1.RDMA主要体现 2.如何理解RDMA和TCP技术的区别&#xff1f; 3.使用RDMA的好处包括&#xff1a; 二.什么是RoCE&#xff1f; 1. RDMA协议包含: Infiniband&#xff08;IB&#xff09; 2. 为什么RoCE是目前主流的RDMA协议&#xff1f; …

GhostNet

文章目录 相关文章一、轻量化网络结构1. 分组卷积2. 深度可分离卷积 二、GhostNet1. 动机2. Ghost Module 相关文章 https://blog.csdn.net/search_129_hr/article/details/130280697 https://blog.csdn.net/c2250645962/article/details/104601305 一、轻量化网络结构 目的…

信息收集(一)域名信息收集

前言 信息收集也叫做资产收集。信息收集是渗透测试的前期主要工作&#xff0c;是非常重要的环节&#xff0c;收集足够多的信息才能方便接下来的测试&#xff0c;信息收集主要是收集网站的域名信息、子域名信息、目标网站信息、目标网站真实IP、敏感/目录文件、开放端口和中间件…

052:cesium加载网格地图

第052个 点击查看专栏目录 本示例的目的是介绍如何在vue+cesium中加载grid地图。一个 ImageryProvider,它在每个具有可控背景和发光的图块上绘制线框网格。 可能对自定义渲染效果或调试地形很有用。 直接复制下面的 vue+cesium源代码,操作2分钟即可运行实现效果. 文章目录 …

redis 教程 6(Redis 的Pipeline , Lua)

Redis 的Pipeline, Lua PipelinePipeline简介为什么需要PipelinePipeline 性能测试与原生批量命令对比 LuaLua 与事物Lua 的用法Redis 如何管理Lua脚本 Pipeline Pipeline简介 Pipeline&#xff08;流水线&#xff09; 能够将一组redis命令进行组装&#xff0c; 通过一次RTT&…

fmriprep2

一. sub-subXXX文件夹 sub-subXXX.html 二. sub-subXXX文件夹 sub-sub097 / anat / figures / func / log / anat / anat文件夹内文件比较多&#xff0c;文件命名规则遵守BIDS要求( https://bids-specification.readthedocs.io/en/stable/05-derivatives/01-introduction.ht…