第三方库react-redux基础使用 容器UI组件使用 数据管理优化

news2024/10/6 0:29:37

其实redux并不是React特有的技术 redux是一家独立公司 做出来 适配与目前几大前端主流框架的状态管理工具。
其实 最初 redux也希望码友们用它来管理vue的状态数据

但后面 React官方发现 很多人喜欢在React项目中使用redux 于是 React公司专门做了react-redux这个第三方的库 帮助我们做状态管理

那么 现在我们就来写一个这样的项目

首先 打开一个react项目

然后先引入redux

npm install redux --save

react-redux只是方便你在项目中更好的管理redux 但他并不能取代redux 还是要引入的

然后 我们引入react-redux

npm install react-redux --save

然后 我们 react-redux 就进来了

然后 我们在src目录下 创建redux文件夹 他主要就做我们几个状态管理估计的容器

redux文件夹下创建一个store.js 参考代码如下

import { createStore,applyMiddleware } from "redux"
import reducer from "../redux/counter"
import thunk from "redux-thunk"

// 创建store仓库
const store = createStore(reducer,applyMiddleware(thunk));

export default store

然后在redux下创建counter.js 参考代码如下

let stateMap = {
   name: "小猫猫",
   money: 2800
}
const counter = ( state = stateMap,action )  => {
    switch(action.type) {
        case"PriceRise":
            state.money = (state.money + action.value);
            return state
        case"DevaLuation":
            state.money = (state.money - action.value);
            return state
        default:
        return state;
    }
}
export default counter

这里 我们定义了stateMap来做redux的state 也就是数据来源

然后 我们定义了两种处理 PriceRise 加的处理 DevaLuation减的处理

redux下创建 action.js 参考代码如下

export function PriceRise(value,callback) {
    return (dispatch) => {
        setTimeout(
            ()=>{
                dispatch({
                    type: "PriceRise",
                    value: value
                });
                callback()
            },500
        )
    }
}
export function DevaLuation(value) {
    return {
        type: "DevaLuation",
        value: value
    }
}

action.js中定义的函数 主要就是帮助调用counter中的函数

这些之前也都提到过

然后 在 src下创建containers文件夹 containers主要用来存放容器组件 容器组件就会通过react-redux来管理我们的ui组件

在containers中创建组件taximeter.jsx这个主要就是我们的第一个容器组件 参考代码如下

import Taximeter from '../components/taximeter';
import {connect} from 'react-redux';
import {PriceRise,DevaLuation} from "../redux/action";

function getStore(store) {
    return {store: store}
}

function setData(dispatch){
    return {
        PriceRise: (value,callback)=> {
            dispatch(PriceRise(value,callback))
        },
        DevaLuation: (value)=> {
            dispatch(DevaLuation(value))
        }
    }
}

export default connect(getStore,setData)(Taximeter)

这里 我们组件就暴露出了store的对象 然后 通过setData定义了调用redux PriceRise和DevaLuation的方法

然后我们容器组件关联了ui组件 我们来编写这个ui组件

在src下 创建 components文件夹 components 就是用来存实体 ui组件的 下面创建taximeter.jsx 参考代码如下

import React from "react";

class App extends React.Component{
  constructor(props){
    super(props);
    this.state = {
    }
  }
  
  onPriceRise = () =>{
    this.props.PriceRise(10,() =>{
      this.setState({})
    });
  }
  onDevaLuation = () =>{
    this.props.DevaLuation(10);
    this.setState({})
  }

  render(){
    return (
      <div className="App">
        <button onClick={ this.onPriceRise }>涨价十个点</button>
        <button onClick={ this.onDevaLuation }>降价十个点</button>
        <div>{ this.props.store.money }</div>
      </div>
    )
  }
}

export default App;

这里 我们完全的复合了react-redux的原则 ui组件没有用一行store的代码 也没有引入store 数据都是调的父级传的 方法也是

然后 我们在 src下 的 App.js 组件中去使用他的容器组件

import './App.css';
import Taximeter from './containers/taximeter';
import store from "./redux/store";

function App() {
  return (
    <div className="App">
        <Taximeter store = {store}/>
    </div>
  );
}

export default App;

可以看到 这里我们调用了容器组件 然后 引入store 并传入

运行项目

在这里插入图片描述4
然后 我们点击 降价
在这里插入图片描述
界面果然成效 减去了十个点

然后我们点加
在这里插入图片描述
因为这是个异步曹组 我们点了之后 他会停顿 500毫秒 然后减去了10个点 这里我们点了两下

整体效果非常成功

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

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

相关文章

【计组】数据通路和流水线设计--《深入浅出计算机组成原理》(三)

课程链接&#xff1a;深入浅出计算机组成原理_组成原理_计算机基础-极客时间 目录 一、建立数据通路 &#xff08;一&#xff09;组合逻辑电路 1、指令周期 2、数据通路 3、CPU所需硬件电路 &#xff08;二&#xff09;时序逻辑电路 1、时序逻辑电路可以解决的问题 二…

Python爬虫进行正则数据解析实战

今天继续给大家介绍Python爬虫相关知识&#xff0c;本文主要内容是Python爬虫进行正则数据解析实战。 一、需求分析 今天&#xff0c;我们尝试使用re正则表达式来对爬取到的页面进行数据解析。需求如下&#xff1a; 针对网页&#xff1a;https://blog.csdn.net/weixin_402282…

第三十二章 数论——组合数详解(1)

第三十二章 数论——组合数的多种求法一、数学基础二、组合数——递推公式1、题目2、思路3、代码三、组合数——快速幂1、问题&#xff1a;2、分析一、数学基础 组合数来自于高中排列组合的知识&#xff1a; 我们从aaa个小球中随机一次性取出bbb个&#xff0c;所有的取法记作…

Numpy学习记录

numpy.ma.ravel 返回一个连续的扁平数组。 参考&#xff1a; numpy中的ravel()方法使用介绍https://blog.csdn.net/weixin_44025103/article/details/125062287 Python numpy.ravel函数方法的使用https://www.cjavapy.com/article/870/ numpy.meshgrid 二维坐标系中,X轴…

图片如何批量重命名?一步一步教会你

爱拍照的小伙伴应该都知道&#xff0c;无论是手机还是相机拍出来的照片&#xff0c;导入电脑后&#xff0c;它的默认名称都是一串长长的字符。不仅让桌面看起来杂乱无章&#xff0c;还会给我们在查找图片时带来诸多的不便。其实我们可以通过软件对这些图片进行批量重命名的&…

线性代数基础----矩阵

秩的理解: 举证的秩的理解: 特征值和特征向量 线性相关和线性无关 向量的拉伸和旋转: 特征值和特征向量: 特征值: 特征向量: 用来描述矩阵的信息 特征向量 和 特征值之间的关系 拳击:方向和力量 特征值和特征向量的物理意义: 表示相关的重要性 特征值和特征向量:进行提…

阳了在家没事干?教大家用python在家做一个万能看视频软件,绝对正经啦~

嗨害大家好鸭&#xff01;我是小熊猫~ 我前阵子不小心阳了&#xff0c;该说不说&#xff0c;真挺难受的 我在家真的就是纸巾热水不离手&#xff0c; 楼下水果店老板娘还说我年轻人身体怎么这么差… 哼我阳过之后我就锻炼去&#xff01;&#xff01;&#xff01; 效果展示 有…

如何删除掉设备和驱动器下百度网盘的图标

电脑安装百度网盘后&#xff0c;在设备和驱动器这里会有百度网盘的图标&#xff0c;如下图所示。 对有强迫症的人来说&#xff0c;这很难受&#xff0c;就一定要想办法删除掉该图标&#xff0c;那么具体怎么操作呢&#xff1f; 你如果在设备和驱动器下右击百度网盘&#xff0c…

12月小报|读小报,涨知识

本期知识小集的主要内容包括&#xff1a;• Flutter桥调用请注意结果反馈• Flutter await代码带来的潜在并发• Flutter FPS 高不代表一定流畅• Flutter新渲染引擎impeller尝鲜Flutter桥调用请注意结果反馈通过桥来拓展Flutter的能力&#xff0c;是非常通用的Flutter开发场景…

Weda创建视图表格

这边我们先创建一个数据集。 在更多操作里面分布这个数据集。 点击编辑&#xff0c;选择视图配置。 在下面这个界面&#xff0c;新建视图。 在操作里面&#xff0c;点击更多&#xff0c;发布这个视图。 我们点击编辑设置视图的第一行&#xff08;表列设置&#xff09;。 点击…

马上又是新的一年了 “跨年倒计时”送给大家

&#x1f3c6;今日学习目标&#xff1a; &#x1f340;跨年倒计时 ✅创作者&#xff1a;林在闪闪发光 ⏰预计时间&#xff1a;30分钟 &#x1f389;个人主页&#xff1a;林在闪闪发光的个人主页 &#x1f341;林在闪闪发光的个人社区&#xff0c;欢迎你的加入: 林在闪闪发光的…

pytorch 深度学习

第二章 回归问题 即使是最简单的线性回归,由于观测误差的存在,也不可能找到一个满足所有样本的函数。因此,我们退而求其次,寻找到一个满足大部分样本点的直线。那么如何衡量这个呢,我们可以求出所有样本点真实值和预测值的误差,满足总误差最小的就是最好的。 连续值…

年关在即,源站安全如何保障?|ScanV(云监测)重保哨兵值守

2022年&#xff0c;全球重大网络安全事件频发&#xff0c;大规模数据泄露、漏洞利用事件、勒索软件攻击等网络犯罪威胁持续上升。网络安全形势日趋严峻&#xff0c;对政府、党政机关、央企国企业务安全造成严重威胁。据知道创宇云防御2022年截至目前的数据统计&#xff0c;平均…

如何去掉任务栏的英伟达图标,并阻止英伟达服务自启动

进入服务&#xff0c;找到NVIDIA的两个服务项&#xff0c;右键属性&#xff0c;停止服务&#xff0c;英伟达图标自动消失。 再把启动方式改为手动&#xff0c;下次就不会开机自启。

WebGL

1、WebGL介绍 1.1 WebGL不足 效果较差&#xff1a;较于桌面开发API&#xff1a;Direct3D、OpenGL、UE、Unity。 开发成本&#xff1a;熟悉并掌握一定的数据知识&#xff0c;例如&#xff1a;线性代数。 硬件要求&#xff1a;开发及部署系统硬件要求较高&#xff0c;尤其GPU…

炒股经验总结

判断大盘调整到后期 高位补跌&#xff0c;大盘出现大阴线 板块炒作到尾声 板块龙头开始回调&#xff0c;炒作炒到边角料 良好的量价关系 放量突破&#xff0c;缩量回踩 跌破前低3天收不回来止损&#xff0c;无关涨跌&#xff0c;这是底线&#xff0c;以后涨了也不后悔&am…

正点原子IMX6ULL-Linux驱动开发

目录 第一期 第6讲 Ubuntu终端操作与Shell命令 第一期 第8讲 Ubuntu文件系统结构 第一期 第9讲 Ubuntu磁盘管理 第一期 第10讲 Ubuntu压缩与解压缩 第一期 第11讲 Ubuntu用户和用户组 第一期 第12讲 Ubuntu文件权限 第一期 第13讲Linux连接文件 第一期 第14讲 vim编辑器 第一期…

专利申请与专利转让有什么区别?

专利申请与专利转让有什么区别&#xff1f; 一、专利转让和专利申请的流程不同 专利转让的流程&#xff1a; (1)找到合适的转让途径; (2)专利转让人和专利受让人进行签署专利权转让合同; (3)填写专利转让相关文件&#xff0c;需要严格按照国家规定形式进行填写&#…

公司想要做自动化测试,那么自动化测试发展和价值回报有哪些?

很长一段时间&#xff0c;都在思考&#xff0c;怎么能通俗的看待自动化测试的收效 自动化测试到底能不能成为一种趋势&#xff1f; 自动化测试到底能不能形成一种规模&#xff1f; 自动化测试到底能不能成为我们的利器&#xff1f; 自动化测试到底能对我们的职业带来何种发…

为什么有的公司会禁用spring声明式事务

在之前我一直偏向于使用声明式事务&#xff0c;我一直觉得声明式事务比较好用。相比于编程式事务&#xff0c;使用声明式事务时只需要加上一个注解&#xff0c;spring就能够帮助我们完成所有的事务控制。反观编程式事务却需要我们自己去控制事务的提交和回滚&#xff0c;这种代…