容器组件container.jsx
// 引入math(ui组件)import MathUI from '../../components/Math'import{ createIncrement,createDecrement, createAsyncIncrement} from '../../redux/count_redux/count_action'//引入store// import store from '../../redux/count_redux/store'//引入connect用于连接ui组件和reduximport {connect} from 'react-redux'// mapStateProps返回一个对象// mapStateProps的返回值作为状态传递给UI组件//返回对象有key,value,相当于props中的key和valuefunction mapStateProps(state){return{count:state}}//mapDispatchToProps返回一个对象//mapDispatchToProps的返回值作为操作状态的方法传递给ui组件,//key就是传递给ui组件中props中的key,value就是传递给ui组件的props中的valuefunction mapDispatchToProps(dispatch){return {jia:(data)=>{dispatch(createIncrement(data))},jian:(data)=>{dispatch(createDecrement(data))},jiaAsync:(data,time)=>{dispatch(createAsyncIncrement(data,time))}}}//高阶函数,连接ui组件//使用connect创建并暴露一个math组件//connect第一个函数是映射ui组件和容器组件的关系,第二个组件是连接ui组件和容器组件export default connect(mapStateProps,mapDispatchToProps)(MathUI)
1.这里的mapStateProp和mapDispatchToProps可以映射容器组件和ui组件
2.这里的容器组件就相当于ui组件的父组件,容器组件通过mapStateProp来传递状态到ui组件。
3.这里的mapStateProp函数可以接受到一个参数,这个参数是state获取redux的初始状态,等价于redux中的store.getState(),并且返回一个对象,key就是传递给ui组件的props的key,value就是传递给ui组件的props的value
4.这里的mapDispatchToProps作为操作状态的方法,在ui组件中可以使用this.props。xxx()调用,mapDispatchToProps的参数是dispatch,用于将action传递给redux并且它返回一个对象,对象的key作为方法名,value是一个函数用于处理初始状态
使用
import React, { Component } from 'react'export default class index extends Component {componentDidMount(){}//加increment=()=>{let {value}=this.selectNumberthis.props.jia(value*1)}//减decrement=()=>{let {value}=this.selectNumberthis.props.jian(value*1)}//异步加asyncIcrement=()=>{let {value}=this.selectNumberthis.props.jiaAsync(value*1,500)}//奇数加oddIcrement=()=>{let {value}=this.selectNumberif(this.props.count%2!=0){this.props.jia(value*1)}}render() {return (<div><h1>当前显示的数是:{this.props.count}</h1><select ref={c=>this.selectNumber=c}><option value="1">1</option><option value="2">2</option><option value="3">3</option></select><button onClick={this.increment}>加</button>   <button onClick={this.decrement}>减</button>   <button onClick={this.asyncIcrement}>异步加</button>   <button onClick={this.oddIcrement}>奇数加</button>   </div>)}}
