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

其实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个点 这里我们点了两下

整体效果非常成功

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值