第六章redux的使用(餐饮版)

news2025/1/18 7:17:52

文章目录

    • 一、redux的使用
      • 1、redux原理图解析
    • 二、同步计算器案例
      • 2、创建src/redux/constant.js(食材库)
      • 3、创建src/redux/store.js(厨房)
        • 3-1、安装redux
        • 3-2、store.js
      • 4、count_reducer.js(厨师)
      • 5、count_action.js(服务员)
      • 6、创建src/components/Count/index.js(顾客)
      • 7、store.subscribe()添加在App.jsx那个文件中的index.js中
    • 三、异步计算器案例
      • 8、count_action.js(服务员修改版)
      • 9、src/components/Count/index.js(顾客修改版)
      • 10、安装redux-thunk(调解人)
      • 11、store.js(厨房修改版)

一、redux的使用

1、redux原理图解析

请添加图片描述

  1. React Components就是react组件(相当于顾客
  2. store.getState()可以获取redux的数据(相当于菜谱)
  3. ActionCreators就是用于接收react组件的需求(相当于服务员
  4. type是react组件向redux传送的标识与仓库的处理方式相匹配(相当于做菜的方式 )
  5. data是react组件向redux传送的数据(相当于顾客对于菜品的要求)
  6. Store就是一个状态管理的仓库(相当于厨房
  7. Reducers就是用于接收Action转发的需求处理(相当于厨师
  8. previousState就是初始化的一个状态(相当于原始的菜谱)
  9. newState是处理好react组件的需求后返回更新一个新的状态(相当于处理好的菜品)
  10. store.subscribe(()=>{ReactDOM.render(,document.getElementById(‘root’))}更新页面状态(相当于顾客得到了菜品展示到了桌面)

二、同步计算器案例

2、创建src/redux/constant.js(食材库)

// 用于变量的定义,防止程序员单词出错
export const INCREMENT = 'increment'
export const DECREMRNT = 'decrement'

3、创建src/redux/store.js(厨房)

3-1、安装redux
npm i redux
3-2、store.js
// 引入createStore,专门用于创建redux中最为核心的store对象
import {createStore} from 'redux'
// 引入仓库接入store.js
import countReducer from './count_reducer'
// 暴露并且创建仓库
export default createStore(countReducer)

4、count_reducer.js(厨师)

// 引入常量库
import { INCREMENT,DECREMRNT } from "./constant";
// 初始化变量(原始菜品) 
const initState = 0
export default function countReducer(preState=initState,action){
    // 分解服务员传送过来的做菜方法,和数据(食材要求)
    const {type,data} = action
    // 匹配方法
    switch(type){
        case INCREMENT:
            // 返回新的菜品
            return preState + data
            
        case DECREMRNT:
            // 返回新的菜品
            return preState - data
            default:
                return preState
    }
}

5、count_action.js(服务员)

// 引入常量库
import { INCREMENT,DECREMRNT } from "./constant";
// 暴露两个方法
// type用于匹配count_reducer的处理方法 ,data是react组件携带的数据
export const incrementAction =(data)=>({type:INCREMENT,data})
export const decrementAction =(data)=>({type:DECREMRNT,data})

6、创建src/components/Count/index.js(顾客)

import React, { Component } from 'react'
// 引入redux
import store from '../../redux/store'
import {incrementAction,decrementAction} from '../../redux/count_action'
import '../Count/count.css'
export default class Count extends Component {

    // componentDidMount(){
    //     // 这个api检测redux的数据有变化就就重新渲染页面,这样太麻烦可以直接在app.jsx中写
    //     store.subscribe(()=>{
    //         this.setState({})
    //     })
    // }
    increment= () =>{
        // 函数体
        const {value} = this.selectNum
        store.dispatch(incrementAction(value*1))
    }
    decremrnt= () =>{
        // 函数体
        const {value} = this.selectNum
        store.dispatch(decrementAction(value*1))
    }
    incrementIfOdd= () =>{
        // 函数体
        const {value} = this.selectNum
        const count = store.getState()
        if(count%2 !== 0){
            store.dispatch({type:'increment',data:value*1})
        }
    }

  render() {
    return (
      <div>
        <h1 className='test'>当前求和为 {store.getState()}</h1>
        <select ref={c => this.selectNum = c}>
            <option value='1'>1</option>
            <option value='2'>2</option>
            <option value='3'>3</option>
        </select>&nbsp;
        <button onClick={this.increment}>+</button>
        <button onClick={this.decremrnt}>-</button>
        <button onClick={this.incrementIfOdd}>当前求和为奇数再加</button>
      </div>
    )
  }
}

7、store.subscribe()添加在App.jsx那个文件中的index.js中

import React from "react";
import  ReactDOM  from "react-dom";
import store from '../src/redux/store'
import App from './App'
ReactDOM.render(<App />,document.getElementById('root'))
store.subscribe(()=>{
    ReactDOM.render(<App />,document.getElementById('root'))
})

三、异步计算器案例

如果说要对计算器进行异步的算法,action方法中返回的就不是对象,是一个函数,但是action中不支持action返回函数,这个时候就需要中间件redux-thunk来调节,就相当于服务员告诉厨师要晚点做菜,但是被拒绝了,需要一个恨厨师关系好的人来调节一下

8、count_action.js(服务员修改版)

// 引入常量库
import { INCREMENT,DECREMRNT } from "./constant";
// 暴露两个方法(同步action就是action的值为obj类型的一般对象)
// type用于匹配count_reducer的处理方法 ,data是react组件携带的数据
export const incrementAction =(data)=>({type:INCREMENT,data})
export const decrementAction =(data)=>({type:DECREMRNT,data})
// 异步action,就是值action的值为函数
export const incrementAsyncAction =(data,time)=>{
   return (dispatch)=>{
      setTimeout(()=>{
         dispatch('incrementAction',data)
      },time)
   }
}

9、src/components/Count/index.js(顾客修改版)

多引入一个action

import {incrementAction,decrementAction,incrementAsyncAction} from '../../redux/count_action'

加一个按钮异步加

<button onClick={this.incrementAsync}>异步加</button>

加一个点击事件

incrementAsync= () =>{
        // 函数体
        const {value} = this.selectNum
        store.dispatch(incrementAsyncAction(value,500))
    }

10、安装redux-thunk(调解人)

npm i redux-thunk

11、store.js(厨房修改版)

// 引入createStore,专门用于创建redux中最为核心的store对象
import {createStore,applyMiddleware} from 'redux'
// 引入仓库接入store.js
import countReducer from './count_reducer'
// 引入redux-thunk用于异步action
import thunk from 'redux-thunk'
// 暴露并且创建仓库
export default createStore(countReducer,applyMiddleware(thunk))

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

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

相关文章

如何从SEO角度写好原创文章并吸引人

不会写原创文章的站长&#xff0c;不能算是好的站长哦。SEO原创文章对于网站优化来说&#xff0c;就像吃饭对于人的生存一样重要。如果一个SEO博客全是复制粘贴别人的文章&#xff0c;那这个博客还有多少意义呢&#xff1f;这就好比别人辛苦种田&#xff0c;你却轻易地把人家的…

Profinet转Modbus RTU网关连接PLC与多功能电表modbus通讯配置案例

Profinet是一种工业以太网通讯协议&#xff0c;广泛用于工业自动化系统中。而Modbus RTU是一种串行通信协议&#xff0c;常用于PLC和仪表之间的通讯。Profinet转Modbus RTU网关(XD-MDPN100)的作用就是将Profinet协议转换为Modbus RTU协议&#xff0c;从而实现PLC和多功能电表之…

zabbix-agnet连接zabbix-proxy

先配置好zabbix-proxy zabbix-proxy配置http://t.csdnimg.cn/RpaCI 在zabbix-proxy服务器上 [rootcloudserver ~]# grep ^[a-Z] /etc/zabbix/zabbix_agentd.conf PidFile/var/run/zabbix/zabbix_agentd.pid LogFile/var/log/zabbix/zabbix_agentd.log LogFileSize0 Server19…

Java 常用类(包装类)

目录 八大Wrapper类包装类的分类 装箱和拆箱包装类和基本数据类型之间的转换常见面试题 包装类方法包装类型和String类型的相互转换包装类常用方法&#xff08;以Integer类和Character类为例&#xff09;Integer类和Character类的常用方法 Integer创建机制&#xff08;面试题&a…

ims-ui项目搭建

node版本&#xff1a; npm版本&#xff1a; 创建vite项目&#xff1a; npm create vitelatest 使用的vite版本为&#xff1a; 安装router4,安装命令如下&#xff1a; npm install vue-router4 安装pinia&#xff0c;安装命令如下&#xff1a; npm install pinia 安装Pinia持…

SLAM从入门到精通(利用数据集来离线制图)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 前面我们的测试大部分都是基于仿真来实现的。但是很多时候&#xff0c;我们其实希还是望自己的算法能够跑在真实场景的数据上。可问题来了&#xf…

MinIO (二) .net core中实现上传下载

这篇文章里&#xff0c;我们介绍在.net core webapi项目中操作MinIO。 首先要创建一个桶&#xff0c;命名为demo 英文文档看不太顺畅&#xff0c;在网上找了一个api中文文档&#xff0c;可供参考 .NET Client API参考文档 - MinIO 帮助文档 - 开发文档 - 文江博客 创建桶 点…

偏偏不信文心大模型4.0比肩GPT-4!我为它们安排了一场龙虎斗!

作者 | 卖萌酱 大家好&#xff0c;我是卖萌酱。盲猜点进本文的不少小伙伴也看了昨天的百度世界大会&#xff0c;百度创始人、董事长兼CEO李彦宏官宣文心大模型4.0发布&#xff0c;其中一句话让卖萌酱印象深刻&#xff1a;文心大模型4.0综合水平与GPT-4相比已经毫不逊色&#xf…

python二次开发Solidworks:画砂轮

先根据输入参数计算出绘制砂轮需要的数据&#xff0c;然后绘制草图&#xff0c;完全标注后生成旋转体&#xff0c;具体代码如下&#xff1a; import sympy as sy import numpy as np import matplotlib.pyplot as pltx1,y1为第一条直线端点坐标(-10,0),theta_l1为角度,取5*np.…

C语言实现用弦截法求 f(x)=x^3-5*x^2+16*x-80=0 的根

完整代码: //用弦截法求 func(x)x^3-5*x^216*x-800 的根 //弦截法就是用函数上两点&#xff0c;连线的斜率近似代替f(x) //公式为Xn1Xn−(Xn−Xn−1)*func(Xn)/(func(Xn)−f(Xn−1))#include<stdio.h> #include<math.h>//求f(x)的值 double func(double x){return…

博客后台模块

一、后台模块-准备工作 1. 前端工程启动 前端工程下载链接 https://pan.baidu.com/s/1TdFs4TqxlHh4DXyLwYuejQ 提取码&#xff1a;mfkw 项目sql文件下载链接 链接&#xff1a;https://pan.baidu.com/s/1DQCGN4wISSDlOkqnVWYwxA 提取码&#xff1a;mfkw 命令行进入keke-vu…

工业4.0时代数字化工厂的几个特点

随着工业4.0时代的到来&#xff0c;数字化工厂成为了制造业的重要组成部分。数字化工厂管理系统是一种应用数字化、自动化和物联网等技术与产业融合的全新生产方式&#xff0c;旨在提高生产效率、降低成本、提升产品质量&#xff0c;并增强企业的核心竞争力。 数字化工厂的核心…

用友GRP-U8 SQL注入漏洞复现

0x01 产品简介 用友GRP-U8R10行政事业财务管理软件是用友公司专注于国家电子政务事业&#xff0c;基于云计算技术所推出的新一代产品&#xff0c;是我国行政事业财务领域最专业的政府财务管理软件。 0x02 漏洞概述 用友GRP-U8的bx_historyDataCheck jsp、slbmbygr.jsp等接口存…

链上房产赛道项目 ESTATEX 研报:以 RWA 的方式释放房产市场的潜力

在上个世纪初&#xff0c;随着全球人口的指数型增长以及城市化趋势加速&#xff0c;全球房地产行业逐渐进入到发展的爆发期与红利期。一方面人口的暴增与城市化进程的的加速&#xff0c;让住宅和商业房地产逐渐形成了刚需&#xff0c;另一方面全球经济飞速发展&#xff0c;让越…

Leetcode.4 寻找两个正序数组的中位数

题目链接 Leetcode.4 寻找两个正序数组的中位数 hard 题目描述 给定两个大小分别为 m m m 和 n n n 的正序&#xff08;从小到大&#xff09;数组 n u m s 1 nums1 nums1 和 n u m s 2 nums2 nums2。请你找出并返回这两个正序数组的 中位数 。 算法的时间复杂度应该为 O…

Pinia学习-存储数据、修改数据以及持久化实现

Pinia是什么&#xff1f; Pinia 是 Vue 的存储库&#xff0c;实现全局变量的定义 这里定义的变量信息&#xff0c;任何页面都可以使用&#xff0c;代替原来的VueX 官网&#xff1a;https://pinia.web3doc.top/ 4.2 Pinia存储数据 4.2.1获取存储数据 实现步骤&#xff1a;…

比例夹管阀及其高精度压力和流量控制解决方案

摘要&#xff1a;针对卫生和无菌流体系统中柔性管路内的压力和流量控制&#xff0c;本文介绍了采用电控夹管阀的高精度控制解决方案。解决方案基于反馈控制原理&#xff0c;采用压力传感器或流量传感器进行测量并反馈给程序控制器&#xff0c;控制器驱动夹管阀来改变柔性管路的…

双目视觉实战--单视图测量方法

目录 一.简介 二、2D变换 1. 等距变换&#xff08;欧式变换&#xff09; 2. 相似变换 3. 仿射变换 4. 射影变换&#xff08;透视变换&#xff09; 5. 结论 三、影消点与影消线 1. 平面上的线 2. 直线的交点 3. 2D无穷远点 4. 无穷远直线 5. 无穷远点的透视变换与仿…

Yakit单兵作战神器简单使用

文章目录 免配置抓包破解编码数据包DNSLog 官网下载地址&#xff1a;https://yaklang.com/ 使用文档&#xff1a;https://www.yaklang.com/products/intro 免配置抓包 会启动一个和BurpSuite一样的内置浏览器 访问地址&#xff0c;就会拦截到数据包 也可以在history里查看 破解…

屏幕录制视频编辑软件 Camtasia 2023 mac中文版软件功能

Camtasia 2023 mac是一款功能强大的屏幕录制和视频编辑软件&#xff0c;可以用于制作教育课程、演示文稿、培训视频等。它具有一系列工具和功能&#xff0c;包括屏幕录制、视频编辑、音频编辑、字幕、特效等&#xff0c;使用户可以轻松地创建高质量的视频内容。 Camtasia2023的…