一、【react-redux】react-redux 基本使用

news2024/11/27 9:35:42

文章目录

  • 1、react-redux模型图
  • 2、放在前面的总结
  • 3、react-redux 简单使用
    • 3.1、项目结构
    • 3.2、CODE
      • 3.2.1、containers/Count/index.jsx
      • 3.2.2、App.js
      • 3.2.3、入口 index.js
      • 3.2.4、Count_Redux.jsx

由于react日常开发人们习惯使用redux做状态管理

FaceBook官方就出了一个react-redux插件,专门用于react的状态管理

更简单,更方便,更舒适

1、react-redux模型图

在这里插入图片描述

2、放在前面的总结

  1. 明确两个概念
    1. UI组件:不能使用任何redux的api,只负责页面的呈现、交互等
    2. 容器组件:负责和redux通信,将结果交给UI组件
  2. 如何创建一个容器组件?靠 react-redux 的 connect 函数
    1. connect(mapStateToProps,mapDispatchToProps)(UI组件)
      1. mapStateToProps:映射状态,返回值是一个对象
      2. mapDispatchToProps:映射操作状态的方法,返回值是一个对象
  3. 备注1:容器组件中的store是靠props传进去的,而不是在容器组件中直接引入
  4. 备注2:mapDispatchToProps,也可以是一个对象

3、react-redux 简单使用

安装指令: yarn add react-reduxnpm i react-redux

3.1、项目结构

此处修改的是 三、【redux】异步action 的求和Demo

创建containers文件夹放置容器组件

在这里插入图片描述

3.2、CODE

安装指令: yarn add react-reduxnpm i react-redux

3.2.1、containers/Count/index.jsx

/**
 * 这是Count的容器组件
 */
// 引入 Count 的UI组件
import CountUI from '../../components/Count_Redux'
// 引入 connect 用于连接UI组件与Redux
import { connect } from 'react-redux'
//引入action
import {
    createIncrementAction,
    createDecrementAction,
    createIncrementAsyncAction
} from '../../redux/count_action'

/* 
    1.mapStateToProps函数返回的是一个对象;
    2.返回的对象中的key就作为传递给UI组件props的key,value就作为传递给UI组件props的value
    3.mapStateToProps用于传递状态
*/
function mapStateToProps(state) {
    return { count: state }
}

/* 
    1.mapDispatchToProps函数返回的是一个对象;
    2.返回的对象中的key就作为传递给UI组件props的key,value就作为传递给UI组件props的value
    3.mapDispatchToProps用于传递操作状态的方法
*/
function mapDispatchToProps(dispatch) {
    return {
        add: num => dispatch(createIncrementAction(num)),
        sub: num => dispatch(createDecrementAction(num)),
        asyncAdd: (num, time) => dispatch(createIncrementAsyncAction(num, time)),
    }
}

// connect创建并返回一个Count的容器组件
export default connect(mapStateToProps, mapDispatchToProps)(CountUI)

3.2.2、App.js

  • 导入的Count改为容器组件
  • 手动将store通过props形式传给Count容器组件
import React, { Component } from 'react'
import Count from './containers/Count' // 改为容器组件
import store from './redux/store'

export default class App extends Component {
  render() {
    return (
      <div>
        <Count store={store} />
      </div>
    );
  }
}

3.2.3、入口 index.js

import React from 'react';
import ReactDOM from 'react-dom/client';
import App from './App';
import store from './redux/store'

const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
  <React.StrictMode>
    <App />
  </React.StrictMode>
);

//监测redux中状态的改变,如redux的状态发生了改变,那么重新渲染App组件
store.subscribe(() => {
  	root.render(
      <React.StrictMode>
        <App />
      </React.StrictMode>
    );
})

3.2.4、Count_Redux.jsx

import React, { Component } from 'react'

export default class Count extends Component {
    state = {
        num: 1
    }

    add = () => {
        const { num } = this.state
        this.props.add(num)
    }

    sub = () => {
        const { num } = this.state
        this.props.sub(num)
    }

    oddAdd = () => {
        const { num } = this.state
        const { count } = this.props
        if (count % 2 === 1) {
            this.props.add(num)
        }
    }

    asyncAdd = () => {
        const { num } = this.state
        this.props.asyncAdd(num, 2000)
    }

    render() {
        const { count } = this.props
        return (
            <div>
                <h1>当前求和为:{count}</h1>
				{/*其他未变...略...*/}
            </div >
        )
    }
}

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

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

相关文章

关于Hbase使用出现java.io.IOException: java.lang.reflect.InvocationTargetException解决

我也不知道出错原因&#xff0c;改着改着就好了&#xff0c;所以以下解决方法可以试试&#xff0c;不保证一定有用。 出现了这样的报错&#xff1a;java.io.IOException: java.lang.reflect.InvocationTargetException 往下看Cause by 百度百度摸到这篇博客 根据上述博客所总结…

【人工智能】知识表示

目录一、知识表示&#xff08;Knowledge Representation&#xff09;的基本概念二、谓词逻辑&#xff08;Predicate Logic&#xff09;表示法三、产生式&#xff08;Production Rule&#xff09;表示法四、语义网络&#xff08;Semantic Network&#xff09;表示法五、框架&…

【单目3D目标检测】MonoGround论文精读与代码解析

文章目录PrefaceAbstractContributionsProblem DefinitionGround Plane PriorIn PaperIn CodePipelineIn PapeIn CodeDepth-Align TrainingIn PaperIn CodeTwo-stage Depth InferenceIn PaperIn CodePreface Qin Z, Li X. MonoGround: Detecting Monocular 3D Objects From the…

一个牛X小编,用Python将普通视频变成动漫,这也太厉害了吧

前言 最近几个月&#xff0c;毒教材被曝光引发争议&#xff0c;那些编写度教材的人着实可恶。咱程序员也没有手绘插画能力&#xff0c;但咱可以借助强大的深度学习模型将视频转动漫。所以今天的目标是让任何具有python语言基本能力的程序员&#xff0c;实现短视频转动漫效果。…

springboot实现excel数据导入导出

目录 1.一些关于excel的常识 2.使用Apache POI操作excel 3.使用easyexcel操作excel 4.结合mybatis-plus批量导入excel数据到数据库 1.一些关于excel的常识 首先关于excel的文件格式&#xff0c;分为xls和xlsx&#xff0c;分别对应03版本和07以后的版本。 03版本的excel最大…

基于云边协同架构的五大应用场景革新

从概念到场景落地&#xff0c;边缘云加速革新&#xff0c;颠覆体验&#xff0c;拟造丰沛生态。边缘云的概念自明确以来已有四个多年头。 什么是边缘云&#xff1f; 边缘云&#xff0c;即把公共云的能力放在离数据发生端和消费端最近的地方&#xff0c;提升数据的处理效率&…

143.如何个性化推荐系统设计-3

143.1 算法介绍 协同过滤算法 协同过滤(Collaborative filtering, CF)算法是目前个性化推荐系统比较流行的算法之一。协同算法分为两个基本算法&#xff1a;基于用户的协同过滤&#xff08;UserCF&#xff09;和基于项目的协同过滤&#xff08;ItemCF&#xff09;。 基于属性…

m基于GA遗传优化的BP神经网络时间序列预测算法matlab仿真

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 将遗传算法&#xff08;GA&#xff09;与BP神经网络相结合&#xff0c;使用GA优化BP神经网络的主要参数。然后将影响输出响应值的多个特征因素作为GA-BP神经网络模型的输入神经元, 输出响应值作为…

[附源码]计算机毕业设计springboot绿色生鲜

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

nfs实现共享目录对于集群高可用风险,nfs客户端容易卡死

目录 背景说明 解决办法 执行步骤 数据移动 取消挂载 停nfs服务&#xff08;客户端&#xff09; 卸载nfs&#xff08;客户端&#xff09; 重启主机&#xff08;客户端&#xff09; 卸载nfs&#xff08;服务端&#xff09; 背景说明 nfs可以完成集群多个主机之间共享目…

感知算法工程师面试===目标检测===YOLO v3

引言 因为找工作的原因&#xff0c;面试中经常遇到目标检测的问题&#xff0c;在2022年的现在&#xff0c;大多是对单步目标检测算法YOLO家族系列展开一系列追问&#xff0c;比如Yolov3、Yolov4、Yolov5、Yolox算法。 另一部分就是Faster RCNN为代表的两阶段目标检测网络。 而…

[附源码]计算机毕业设计JAVA小区宠物管理系统

[附源码]计算机毕业设计JAVA小区宠物管理系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybati…

blender UV基础

文章目录进入UV界面导出UV布局图拆分UV清除现有UV展开UV不同UV展开方式智能UV投射缝合边进入UV界面 1 选中一个物体&#xff0c;选择最上方UVEditing即可进入UV界面 2 注意进入UV界面后&#xff0c;舞台也会自动进入编辑模式 3 只有在编辑模式里才能操作UV 4 选择一个面来单独…

Linux学习-61-Linux系统服务管理

14 Linux系统服务管理 系统服务&#xff1a;服务是在后台运行的应用程序&#xff0c;并且可以提供一些本地系统或网络的功能。Linux 中常见的服务有那些&#xff0c;这些服务怎么分类&#xff0c;服务如何启动&#xff0c;服务如何自启动&#xff0c;服务如何查看&#xff1f;…

Codeforces Round #725 (Div. 3) F. Interesting Function

翻译&#xff1a; 给出两个整数&#x1d459;和&#x1d45f;&#xff0c;其中&#x1d459;<&#x1d45f;。我们将在&#x1d459;上加1&#xff0c;直到结果等于&#x1d45f;。因此&#xff0c;执行的添加恰好是&#x1d45f;−&#x1d459;。对于每一个这样的加法&am…

pytest文档84 - 把收集的 yaml 文件转成pytest 模块和用例

前言 前面实现了一个基础的读取yaml文件内容&#xff0c;当成用例去执行。虽然入门简单&#xff0c;但需要扩展功能&#xff0c;比如在 yaml 用例实现参数化&#xff0c;就不好扩展了。 因为它并不是一个真正的pytest的模块和用例&#xff0c;无法被钩子函数探测到。所以这篇会…

CV攻城狮入门VIT(vision transformer)之旅——VIT原理详解篇

&#x1f34a;作者简介&#xff1a;秃头小苏&#xff0c;致力于用最通俗的语言描述问题 &#x1f34a;往期回顾&#xff1a;CV攻城狮入门VIT(vision transformer)之旅——近年超火的Transformer你再不了解就晚了&#xff01; &#x1f34a;近期目标&#xff1a;写好专栏的每一篇…

Linux centos7.6 安装elasticsearch8.x (es8) 教程

系列-Linux centos7.6 安装elasticsearch8.x (es8) 教程 Linux centos7.6 安装elasticsearch8.x (es8) 教程_言之有李LAX的博客-CSDN博客 系列-linux安装elasticsearch-head &#xff08;es可视化界面&#xff09; linux安装elasticsearch-head &#xff08;es可视化界面&am…

隆重推出 Incredibuild 10

变更可能来的很快&#xff0c;也可能来的很慢。但有时候&#xff0c;它真的值得我们等待。您并非每天都能目睹一个很棒的平台进一步发展成为一个不可思议&#xff08;Incredible&#xff09;的平台。今天&#xff0c;我们将正式发布最新版本——Incredibuild 10&#xff01;经过…

SIMetrix导入MOS管参数的另一种方法

问题的提出 在采用SIMetrix 8.3软件进行E类放大器的仿真过程中&#xff0c;用到了NEXPERIA公司的NMOS管器件PMH550UNE, 但在SIMetrix 8.3的库中没有该器件&#xff0c;因此需要导入第三方库文件. 通常的办法是从生产该器件的公司网站上下载器件库文件&#xff0c;导入到SIMet…