容器组件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组件和redux
import {connect} from 'react-redux'
// mapStateProps返回一个对象
// mapStateProps的返回值作为状态传递给UI组件
//返回对象有key,value,相当于props中的key和value
function mapStateProps(state){
return{count:state}
}
//mapDispatchToProps返回一个对象
//mapDispatchToProps的返回值作为操作状态的方法传递给ui组件,
//key就是传递给ui组件中props中的key,value就是传递给ui组件的props中的value
function 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.selectNumber
this.props.jia(value*1)
}
//减
decrement=()=>{
let {value}=this.selectNumber
this.props.jian(value*1)
}
//异步加
asyncIcrement=()=>{
let {value}=this.selectNumber
this.props.jiaAsync(value*1,500)
}
//奇数加
oddIcrement=()=>{
let {value}=this.selectNumber
if(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>
)
}
}