Redux状态管理(运行机制及实例)

news2024/12/23 14:11:14

在这里插入图片描述

背景:

JavaScript需要管理的状态越来越多,越来越复杂;这些状态包括服务器返回的数据、缓存数据、用户操作产生的数据等等,也包括一些UI的状态,比如某些元素是否被选中,是否显示加载动效,当前分页。

状态之间相互会存在依赖,一个状态的变化会引起另一个状态的变化,View页面也有可能会引起状态的变化;当应用程序复杂时,state在什么时候,因为什么原因而发生了变化,发生了怎么样的变化,会变得非常难以控制和追踪。

无论是组件定义自己的state,还是组件之间的通信通过props进行传递; 也包括通过Context进行数据之间的共享;React主要负责帮助我们管理视图,state如何维护最终还是我们自己来决定。

官网:

网址:
https://cn.redux.js.org/introduction/getting-started

手画图解:

请添加图片描述

准备工作:

安装Redux Toolkit 与 react-redx:

npm install @reduxjs/toolkit react-redux

在这里插入图片描述

实现counter:
ka.js:

import { createSlice } from '@reduxjs/toolkit'
import http from '../../utils/http'

const kaSlice = createSlice({
  name: 'ka',
  initialState: {
    billList: [],
  },
  reducers: {
    setBillList (state, action) {
      state.billList = action.payload
    },
    addBill (state, action) {
      state.billList.push(action.payload)
    }
  }
})

// 记一笔
const { addBill } = kaSlice.actions
const createBill = (data) => {
  return async (dispatch) => {
    const res = await http.post('/ka', data)
    dispatch(addBill(res.data))
  }
}

// 获取
const { setBillList } = kaSlice.actions
const getBills = () => {
  return async (dispatch) => {
    const res = await http.get('/ka')
    dispatch(setBillList(res.data))
  }
}
export default kaSlice.reducer

export {
  createBill,
  getBills
}


//解构actionCreater函数
const { inscrement, decrement } = counterStore.actions
//获取reducer
const reducer = counterStore.reducer

//导出
export { inscrement, decrement }
export default reducer

store/index:

import { configureStore } from '@reduxjs/toolkit'
import ka from './slices/ka'

const store = configureStore({
  reducer: {
    ka,
  },
})

export default store

index:

import React from 'react'
import ReactDOM from 'react-dom/client'

import { RouterProvider } from 'react-router-dom'
import router from './router'
import './index.css'

import { Provider } from 'react-redux'
import store from './store'

const root = ReactDOM.createRoot(document.getElementById('root'))
root.render(
  <Provider store={store}>
    <RouterProvider router={router} />
  </Provider>
)

组件中使用store的数据:
useSelector把store的数据映射到组件中去
useDispatch通过action提交对象的dispatch函数

import { useSelector,useDispatch } from 'react-redux'
import { createBill } from '@/store/slices/ka'

const AppComponent= () => {
    const dispatch = useDispatch()
    const { billList} = useSelector(state => state.billList)
    const saveBill = async () => {
        const data = {}
        await dispatch(createBill(data))
    }
    return (
       <Button className="btn save" onClick={() => saveBill()}>保 存</Button>
    }
}

export default AppComponent

dispatch提交action传参,可以携带参数过去!:

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

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

相关文章

prometheus的alertmanager监控报警

监控告警&#xff1a; alert是一个单独的模块&#xff0c;需要我们单独的配置。 需要声明一个邮箱地址。配置是以configmap进行部署。 alert 实验&#xff1a; vim alert-cfg.yaml apiVersion: v1 kind: ConfigMap metadata:name: alertmanagernamespace: monitor-sa data…

【Spring Boot 源码学习】BootstrapRegistry 详解

《Spring Boot 源码学习系列》 BootstrapRegistry 详解 一、引言二、往期内容三、主要内容3.1 源码初识3.2 register 方法3.3 registerIfAbsent 方法3.4 isRegistered 方法3.5 getRegisteredInstanceSupplier 方法3.6 addCloseListener 方法3.7 InstanceSupplier 内部接口类3.7…

༺༽༾ཊ—Unity之-01-工厂方法模式—ཏ༿༼༻

首先创建一个项目&#xff0c; 在这个初始界面我们需要做一些准备工作&#xff0c; 建基础通用文件夹&#xff0c; 创建一个Plane 重置后 缩放100倍 加一个颜色&#xff0c; 任务&#xff1a;使用工厂方法模式 创建 飞船模型&#xff0c; 首先资源商店下载飞船模型&#xff0c…

2024-01-06-AI 大模型全栈工程师 - 机器学习基础

摘要 2024-01-06 阴 杭州 晴 本节简介: a. 数学模型&算法名词相关概念; b. 学会数学建模相关知识&#xff1b; c. 学会自我思考&#xff0c;提升认知&#xff0c;不要只会模仿&#xff1b; 课程内容 1. Fine-Tuning 有什么作用&#xff1f; a. 什么是模型训练&#xff…

springboot144基于mvc的高校办公室行政事务管理系统设计与实现

简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的 适用于计算机类毕业设计&#xff0c;课程设计参考与学习用途。仅供学习参考&#xff0c; 不得用于商业或者非法用途&#xff0c;否则&#xff0c;一切后果请用户自负。 看运行截图看 第五章 第四章 获取资料方式 **项…

VMware虚拟机安装统信uos桌面专业版操作系统系统

统信uos桌面版版本对比:https://www.uniontech.com/next/product/desktop-contrast专业版只要是面向政企等单位,这里只是用虚拟机安装测试基本功能使用,对于我们个人要长期使用的话可以使用家庭版或者社区版 1镜像下载 1.1打开官网 镜像在统信生态社区下载统信生态社区官网:…

C#,洛布数(Lobb Number)的计算方法与源代码

1 洛布数&#xff08;Lobb Number&#xff09; 在组合数学中&#xff0c;洛布数&#xff08;Lobb Number&#xff09;L(m&#xff0c;n)计算nm开括号的排列方式&#xff0c;以形成一个有效的平衡括号序列的开始。 Lobb数由两个非负整数m和n参数化&#xff0c;其中n>m>0。…

【金蝶BI方案】用一张报表,分析生产完成情况

当老板问生产完成地怎样&#xff1f;难道还能拿出一叠报表让老板逐个细看&#xff1f;奥威-金蝶BI方案只用一张BI数据可视化报表就把整个生产完成情况给讲明白了。甚至还能满足老板想从不同角度进行分析的需求。 奥威-金蝶BI方案-BI生产完成情况报表 这张报表总结计算了生产合…

微软新的内部开发部门发现了第一个 Windows 12 版本

Windows 11 被证明让很多人有点失望&#xff0c;很多 Windows 10 用户认为没有理由升级。 这意味着有大量用户渴望一些大而令人印象深刻的东西——而这正是 Windows 12 所希望的。 无论您是 Windows 10 的忠实拥趸&#xff0c;还是渴望更新、更闪亮的 Windows 11 采用者&#x…

工具方法 - 找富婆包养的必胜法则

【标准的问题解决方法&#xff0c;以及作业标准与标准作业】 第一步: 明确问题 你的人生轨迹是&#xff1a; 你要解决的问题是&#xff0c;找到自己的爱人。 而立之年&#xff0c;恋爱结婚已成为一大任务&#xff01; 第二步&#xff1a;了解现状 我们在做计划之前必须进行一…

vit细粒度图像分类(七)TBNet学习笔记

1.摘要 细粒度鸟类图像识别致力于实现鸟类图像的准确分类&#xff0c;是机器人视觉跟踪中的一项基础性工作。鉴于濒危鸟类的监测和保护对保护濒危鸟类具有重要意义&#xff0c;需要采用自动化方法来促进鸟类的监测。在这项工作中&#xff0c;我们提出了一种新的基于机器人视觉…

Qt读写Execl:QXlsx库

Qt三方库开发技术&#xff1a;QXlsx介绍、编译和使用 我自己记录的实例代码&#xff1a;https://download.csdn.net/download/cao_jie_xin/88795216 目录 一、概述二、下载三、编译四、加载QXlsx静态库五、介绍一些常用的功能1、一些头文件和命名空间2、创建一个excel文件3、…

二进制安全虚拟机Protostar靶场(5)堆的简单介绍以及实战 heap0

前言 这是一个系列文章&#xff0c;之前已经介绍过一些二进制安全的基础知识&#xff0c;这里就不过多重复提及&#xff0c;不熟悉的同学可以去看看我之前写的文章 什么是堆 堆是动态内存分配的区域&#xff0c;程序在运行时用来分配内存。它与栈不同&#xff0c;栈用于静态…

外包干了8个月,技术退步明显...

先说一下自己的情况&#xff0c;大专生&#xff0c;18年通过校招进入武汉某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落! 而我已经在一个企业干了四年的功能测…

2023安防行业十件大事,一定有你关心的

2023年对我国安防行业来说&#xff0c;可以说是既充满希望又充满不确定性的一年。经历三年的市场低迷&#xff0c;2023年安防市场开始逐渐回暖&#xff0c;行业景气度缓慢上升。 那么&#xff0c;2023年我国安防行业都发生了哪些值得铭记的大事&#xff1f;哪些事件对安防产业…

手把手教测试,全网内容最全最深-jmeter-Throughput Controller(吞吐量控制器)

5.1.6.15.Throughput Controller(吞吐量控制器) 用来控制后代组件的执行的次数。有两种模式&#xff1a;百分比和次数&#xff1b;不会影响取样器的 TPS&#xff0c;只影响执行次数。 1.按照次数执行&#xff1a; 1).勾选Per User&#xff1a; 2).不勾选Per User&#xff1a…

Skywalking trace UI页面中字段信息详解,包括端点、跨度类型和Peer

刚上手Skywalking的同学可能对 trace UI 页面信息中的字段信息不是很了解&#xff0c;在这里就给大家一一讲解&#xff0c;重点关注端点、跨度类型和Peer 服务 :服务的名称 实例&#xff1a;服务对应的实例 端点&#xff1a;端点(Endpoint) 对于特定服务所接收的请求路径, 如…

Wampserver 切换中文时无法启动报错处理

在使用 Wampserver 软件时默认为英语&#xff0c;可以看到有语言选择功能&#xff0c;切换其他语言。但选择中文切换后&#xff0c;软件重启时报如下错误&#xff1a; The configuration file contains a systax error on line 44:[EParseError] Mismatched or misplaced quoue…

【Linux】VMware Workstation16安装银河麒麟高级服务器操作系统V10 SP3 AMD64

目录 一、麒麟服务器概述 二、安装步骤 设置硬盘大小 完成配置 修改内存 处理器等设备配置 选择直接安装 配置磁盘 网络配置 设置root账号密码 开始安装 启动完成 一、麒麟服务器概述 银河麒麟高级服务器操作系统V10是针对企业级关键业务&#xff0c;适应虚拟化、云…

PyTorch 中神经网络库torch.nn的详细介绍

1. torch.nn torch.nn 是 PyTorch 深度学习框架中的一个核心模块&#xff0c;它为构建和训练神经网络提供了丰富的类库。 以下是 torch.nn 的关键组成部分及其功能&#xff1a; nn.Module 类&#xff1a; nn.Module 是所有自定义神经网络模型的基类。用户通常会从这个类派生…