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

更简单的Redux工具 Toolkit

1 安装

npm install @reduxjs/toolkit

2 创建store目录

创建store文件夹,里面包含入口文件index.jsx,以及自定义的reduces方法main.jsx的slices文件夹,其中main1.jsx、main2.jsx表示每一个相对独立的reduces数据操作集
store
***slices
******main1.jsx
******main2.jsx
******…
***index.jsx

3 定义store结构

index.jsx(在项目入口处引入该文件)

import { configureStore } from '@reduxjs/toolkit'
import main1 from './slices/main1'
import main2 from './slices/main2'export const store = configureStore({reducer: { main1, main2 }
})export default store

main1.jsx(在页面中引入该文件)

import { createSlice, createAsyncThunk } from '@reduxjs/toolkit'const initialState = {status: 10,
}export const getRequestFn = createAsyncThunk( // 异步接口修改state'requestName',async () => {try {// 触发一个请求const { data } = await requestApi()return data} catch (err) {console.log('requestName', err)}}
)const mainSlice = createSlice({name: 'main1',initialState,reducers: {increment(state, action) {state.status = state.status + action.payload},decrement(state, action) {state.status = state.status - action.payload},changeValue(state, action) {state.status = action.payload},},extraReducers(builder) {builder.addCase(getRequestFn.fulfilled, (state, actions) => {if (!actions.payload) returnstate.status = actions.payload.status // 赋值为请求的data.status})}
})export const actions = mainSlice.actionsexport default mainSlice.reducer

4 使用

在项目入口处引入store/index.jsx,
并在需使用store的组件中引入store/slices/main.jsx
项目中的具体使用如下:

import React, { memo } from 'react'
import { useSelector, useDispatch } from 'react-redux'
// 这里引入main1的地址,main1、main2按需引入
import { actions, getRequestFn } from '**/store/slices/main1'function Home() {const { status } = useSelector(state => state.main)const dispatch = useDispatch()const handleAdd = () => {dispatch(actions.increment(1)) // status => 11}const handleAssign = () => {dispatch(actions.changeValue(100)) // status => 100}const handleRequest = () => {dispatch(getRequestFn()) // status => request data.status} return <div><div onClick={handleAdd}></div><div onClick={handleAssign}></div><div onClick={handleRequest}></div></div>
}export default Home

Redux官网

相关文章:

  • 日志收集 grafana-loki
  • IntelliJ IDEA图形安装教程
  • MySQL 临时数据空间不足导致SQL被killed 的问题与扩展
  • 防火墙补充NAT
  • html和css写淘宝的快速导航条
  • 多路径传输(MPTCP MPQUIC)数据包调度研究总结
  • 加密系统,您的数据安全守护者,助您远离泄露风险!
  • Java多线程:代码不只是在‘Hello World‘
  • 【Openstack Train安装】十一、Dashboard 安装
  • 计算机网络(二)| 物理层上 | 数据通信基础知识 调制 频率范围 信噪比
  • Django之admin后台页面功能详解
  • 1.1美术理论基础
  • C语言实现植物大战僵尸(完整版)
  • 【高数:1 映射与函数】
  • 算法刷题之数组篇
  • 《微软的软件测试之道》成书始末、出版宣告、补充致谢名单及相关信息
  • 【140天】尚学堂高淇Java300集视频精华笔记(86-87)
  • 【159天】尚学堂高琪Java300集视频精华笔记(128)
  • 2017届校招提前批面试回顾
  • css的样式优先级
  • ES学习笔记(10)--ES6中的函数和数组补漏
  • HTTP 简介
  • JavaScript服务器推送技术之 WebSocket
  • Laravel 实践之路: 数据库迁移与数据填充
  • leetcode386. Lexicographical Numbers
  • RedisSerializer之JdkSerializationRedisSerializer分析
  • SpringBoot 实战 (三) | 配置文件详解
  • Vue.js 移动端适配之 vw 解决方案
  • vue-cli在webpack的配置文件探究
  • webpack入门学习手记(二)
  • 从零开始在ubuntu上搭建node开发环境
  • 动态魔术使用DBMS_SQL
  • 关于extract.autodesk.io的一些说明
  • 前端性能优化——回流与重绘
  • 一天一个设计模式之JS实现——适配器模式
  • 用Canvas画一棵二叉树
  • - 转 Ext2.0 form使用实例
  • 新年再起“裁员潮”,“钢铁侠”马斯克要一举裁掉SpaceX 600余名员工 ...
  • # 执行时间 统计mysql_一文说尽 MySQL 优化原理
  • (3)选择元素——(14)接触DOM元素(Accessing DOM elements)
  • (C#)Windows Shell 外壳编程系列9 - QueryInfo 扩展提示
  • (笔记)Kotlin——Android封装ViewBinding之二 优化
  • (层次遍历)104. 二叉树的最大深度
  • (第一天)包装对象、作用域、创建对象
  • (附源码)spring boot火车票售卖系统 毕业设计 211004
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (五)c52学习之旅-静态数码管
  • (转)Groupon前传:从10个月的失败作品修改,1个月找到成功
  • .MyFile@waifu.club.wis.mkp勒索病毒数据怎么处理|数据解密恢复
  • .NET Framework 和 .NET Core 在默认情况下垃圾回收(GC)机制的不同(局部变量部分)
  • .NET WebClient 类下载部分文件会错误?可能是解压缩的锅
  • .NET/C# 使用 #if 和 Conditional 特性来按条件编译代码的不同原理和适用场景
  • .NET框架类在ASP.NET中的使用(2) ——QA
  • .NET下的多线程编程—1-线程机制概述
  • .NET中的十进制浮点类型,徐汇区网站设计