容器组件container.jsx

    1. // 引入math(ui组件)
    2. import MathUI from '../../components/Math'
    3. import{ createIncrement,createDecrement, createAsyncIncrement} from '../../redux/count_redux/count_action'
    4. //引入store
    5. // import store from '../../redux/count_redux/store'
    6. //引入connect用于连接ui组件和redux
    7. import {connect} from 'react-redux'
    8. // mapStateProps返回一个对象
    9. // mapStateProps的返回值作为状态传递给UI组件
    10. //返回对象有key,value,相当于props中的key和value
    11. function mapStateProps(state){
    12. return{count:state}
    13. }
    14. //mapDispatchToProps返回一个对象
    15. //mapDispatchToProps的返回值作为操作状态的方法传递给ui组件,
    16. //key就是传递给ui组件中props中的key,value就是传递给ui组件的props中的value
    17. function mapDispatchToProps(dispatch){
    18. return {
    19. jia:(data)=>{
    20. dispatch(createIncrement(data))
    21. },
    22. jian:(data)=>{
    23. dispatch(createDecrement(data))
    24. },
    25. jiaAsync:(data,time)=>{
    26. dispatch(createAsyncIncrement(data,time))
    27. }
    28. }
    29. }
    30. //高阶函数,连接ui组件
    31. //使用connect创建并暴露一个math组件
    32. //connect第一个函数是映射ui组件和容器组件的关系,第二个组件是连接ui组件和容器组件
    33. 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是一个函数用于处理初始状态

    使用

    1. import React, { Component } from 'react'
    2. export default class index extends Component {
    3. componentDidMount(){
    4. }
    5. //加
    6. increment=()=>{
    7. let {value}=this.selectNumber
    8. this.props.jia(value*1)
    9. }
    10. //减
    11. decrement=()=>{
    12. let {value}=this.selectNumber
    13. this.props.jian(value*1)
    14. }
    15. //异步加
    16. asyncIcrement=()=>{
    17. let {value}=this.selectNumber
    18. this.props.jiaAsync(value*1,500)
    19. }
    20. //奇数加
    21. oddIcrement=()=>{
    22. let {value}=this.selectNumber
    23. if(this.props.count%2!=0){
    24. this.props.jia(value*1)
    25. }
    26. }
    27. render() {
    28. return (
    29. <div>
    30. <h1>当前显示的数是:{this.props.count}</h1>
    31. <select ref={c=>this.selectNumber=c}>
    32. <option value="1">1</option>
    33. <option value="2">2</option>
    34. <option value="3">3</option>
    35. </select>
    36. <button onClick={this.increment}>加</button>&nbsp;&nbsp;&nbsp;
    37. <button onClick={this.decrement}>减</button>&nbsp;&nbsp;&nbsp;
    38. <button onClick={this.asyncIcrement}>异步加</button>&nbsp;&nbsp;&nbsp;
    39. <button onClick={this.oddIcrement}>奇数加</button>&nbsp;&nbsp;&nbsp;
    40. </div>
    41. )
    42. }
    43. }