redux和react-redux结合书写计数器

2023-10-30

  1. 安装包

    npm install redux
    npm install react-redux
    npm install redux-thunk //如果使用了异步action的话,需要安装
    npm install antd // ant-design UI组件库
    
  2. reduxreact-redux结合,实现UI组件和容器组件分离

import React, { Component } from "react";
import { connect } from "react-redux";
import { Select, Row, Col, Button } from "antd";
import * as actions from "../../store/action";

//  mapStateToProps mapDispatchToProps 是容器组件,使用react-redux提供的connect进行连接
function mapStateToProps(state) {
    return { ...state };
}

function mapDispatchToProps(dispatch) {
    return {
        handlePlus: (value) => dispatch(actions.plusAction(value)),
        handleMinus: (value) => dispatch(actions.minusAction(value)),
        handleAsyncPlus: (value, time) =>
            dispatch(actions.plusAsyncAction(value, time)),
        handleAsyncMinus: (value, time) =>
            dispatch(actions.minusAsyncAction(value, time)),
    };
}

const options = [
    {
        value: 1,
        label: 1,
    },
    {
        value: 3,
        label: 3,
    },
    {
        value: 5,
        label: 5,
    },
    {
        value: 10,
        label: 10,
    },
];

// ui 组件
class Counter extends Component {
    state = {
        value: 1,
    };

    handleChange = (value) => {
        this.setState({ value });
    };

    handlePlus = () => {
        const { value } = this.state;
        this.props.handlePlus(value);
    };

    handleMinus = () => {
        const { value } = this.state;
        this.props.handleMinus(value);
    };

    handleAsyncPlus = () => {
        const { value } = this.state;
        this.props.handleAsyncPlus(value, 1000);
    };

    handleAsyncMinus = () => {
        const { value } = this.state;
        this.props.handleAsyncMinus(value, 1000);
    };

    render() {
        const { value } = this.state;
        const { counter } = this.props;

        return (
            <>
                <Row>
                    <Col
                        span={24}
                        style={{
                            fontSize: "24px",
                            color: "#409eff",
                            textAlign: "center",
                        }}
                    >
                        {counter}
                    </Col>
                </Row>
                <Row>
                    <Col span={4} offset={8}>
                        <Select
                            style={{ width: "100%" }}
                            onChange={this.handleChange}
                            placeholder="请选择"
                            options={options}
                            allowClear
                            value={value}
                        />
                    </Col>

                    <Col span={8}>
                        <Button
                            type="primary"
                            style={{ marginLeft: "10px" }}
                            onClick={this.handlePlus}
                        >
                            plus
                        </Button>
                        <Button
                            type="primary"
                            style={{ marginLeft: "10px" }}
                            onClick={this.handleMinus}
                        >
                            minus
                        </Button>
                        <Button
                            type="primary"
                            style={{ marginLeft: "10px" }}
                            onClick={this.handleAsyncPlus}
                        >
                            async plus
                        </Button>

                        <Button
                            type="primary"
                            style={{ marginLeft: "10px" }}
                            onClick={this.handleAsyncMinus}
                        >
                            async minus
                        </Button>
                    </Col>
                </Row>
            </>
        );
    }
}

let container = connect(mapStateToProps, mapDispatchToProps)(Counter);
export default { ...container, name: "Counter" };

  1. 详细的代码链接点击此处
  2. npm run start运行
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

redux和react-redux结合书写计数器 的相关文章

随机推荐

  • [从零开始学DeepFaceLab-17]: 使用-命令行八大操作步骤-第7步:模型预测与生成合成图片 - 进阶 - 通过图形界面调参微调、精细合成图片

    目录 前言 第1章 如何进入可视化微调界面 第2章 窗口操作详解 2 1 操作图片选择
  • 软件测试职业规划

    软件测试职业规划 以下是转载内容 软件测试人员的发展误区 4 公司开发的产品专业性较强 软件测试人员需要有很强的专业知识 现在软件测试人员发展出现了一种测试管理者不愿意看到的景象 1 开发技术较强的软件测试人员转向了软件开发 非测试工具开发
  • spring boot 跨域问题(sessionid不一致 已解决)

    现象 Spring boot验证码接口与登录接口的sessionid不一致 解决方法 WebConfig中添加如下代码 Override public void addCorsMappings CorsRegistry registry r
  • 用ESP32玩转真彩屏

    很多人都说ESP32的出现是物联网开发者的福音 就是专为物联网应用而设计的 没错 我们都这样认为 ESP32不仅具有业内高水平的低功耗性能 而且它的高度集成特性 将天线开关 RF balun 功率放大器 接收低噪声放大器 滤波器 电源管理模
  • 微信开发相关:使用微信 JS-SDK 接口

    微信开发相关 使用微信 JS SDK 接口 准备工作 接口使用流程 公众号设置 前端向后端请求 ticket 后端向微信获取 token 后端根据 token 生成 ticket 根据 ticket 创建签名 前端创建配置信息 并注入验证
  • flutter Vertical viewport was given unbounded height

    问题描述 在Flutter开发中遇到 Vertical viewport was given unbounded height 问题出现的情况 这个问题主要是ListView builder出现的问题 如果是简单用的话 会出现这个问题的话
  • gcc/g++编译器的使用

    1 gcc编译器简介 gcc原名是GNU C Complier 支持C语言的编译链接 也支持C object c等语言的编译链接 根据 深入理解计算机系统 第三版 第1 2小节内容 gcc将一个源程序文件转换为最终的可执行程序需要经过预处理
  • IDEA 配置Maven国内源

    首先打开设置 在设置中搜索maven 然后跳转到这个页面 看到有一个User settings files这个项 Users xq m2 settings xml这个便是配置文件 修改这个文件即可 如果没有这个文件 可以新建一个settin
  • C++类模板的使用

    一 基本使用 通用类型用于成员变量 通用类型用于成员函数的参数 通用类型用于成员函数的返回值 获取成员变量 通用类型用于成员函数的代码中 代码 include
  • 【计算机视觉

    文章目录 一 检测相关 6篇 1 1 ALWOD Active Learning for Weakly Supervised Object Detection 1 2 mEBAL2 Database and Benchmark Image
  • C语言六种方法求素数(质数) 最全 输出2-100以内的所有素数 求1000以内的所有素数

    方法一 挨个遍历 从1 1000都试一次 通俗易懂的方法 include
  • 优秀程序员

    优秀程序员 拷贝型 新手型 学习型 实现型 架构型 1 拷贝型 拷贝型选手就是传说中的 代码拷贝员 了 他们对实现功能几乎没有思路 所作的事情就是从网上或是之前其他团队成员写的代码中拷贝出片段 然后放到项目中 如果运行项目出现了期望结果 则
  • 闲鱼无货源新玩法,从入门到精通,由浅入深教你怎么去做

    标题 闲鱼无货源新玩法 从入门到精通 由浅入深教你如何经营成功 随着电商的兴起 许多人开始利用平台经营自己的小生意 在这篇文章中 我们将聚焦于闲鱼平台 并分享关于如何从入门到精通运营成功的闲鱼无货源新玩法 以下是一些关键词 将帮助您更好地了
  • 7-1 二叉树的基本运算 (10 分)

    本习题为二叉树的基本运算练习 要求依次实现如下功能 1 输入一个使用 括号表示法 表示的二叉树 每个节点的数据为一个字符 请使用二叉链的存储方式构建二叉树B 2 使用中序遍历法遍历构建的二叉树 输出中序遍历的序列 3 输出该二叉树的高度 深
  • 【simulink】Three-PhaseV-I Measurement(三相电压电流测量)

    三相电压测量模块 MATLAB 三相电压电流测量模块怎么用 simulink Three PhaseV I Measurement 三相电压电流测量
  • 10X Genomics单细胞转录组测序

    一 单细胞及普通转录组比较 单细胞转录组测序 scRNA seq 在单个细胞水平上构建每个细胞的基因表达谱 反映细胞异质性 发现新的细胞类型 了解细胞表达调控机制 通过选取不同时间点的样本 再进行单细胞转录组测序 能够在单细胞水平获得基因
  • Java类加载

    类加载 执行 类加载 过程 对象的创建 类加载器 双亲委派 打破双亲委派 常见以tomcat和SPI为例 tomcat SPI 执行 解释执行 or 编译执行 关于编译 JIT编译器与解释器的工作模式 JIT编译器 分层编译 热点监测 热点
  • uniapp项目中给相机相册图片添加水印功能。

    效果如图 废话不多说 直接上代码吧 哦多说一句 在使用下面组件时需要在uniapp项目中安装uView组件库uView官网 详细的安装流程可以看这篇文章uView安装教程 也可以去官网查看官方文档 上面介绍的很清楚 添加水印组件hpy wa
  • 控制科学与工程 计算机那个好,控制科学与工程(自动化)最好的94所大学排名

    控制科学与工程是工科的四大 王牌 学科之一 是除了电气工程 机械制造 土木工程 计算机科学与技术外 比较 热门 的工科专业之一 同电气工程相比 控制科学与工程更加偏向控制 自动化 现场总线以及系统集成等方向 实际上 控制科学与工程很多人可能
  • redux和react-redux结合书写计数器

    安装包 npm install redux npm install react redux npm install redux thunk 如果使用了异步action的话 需要安装 npm install antd ant design U