美文网首页深入浅出Redux系列
19-mapDispatchToProps的第二个参数

19-mapDispatchToProps的第二个参数

作者: 钢笔先生 | 来源:发表于2020-01-30 15:22 被阅读0次

Time: 20200130

关于返回函数和函数执行

import React from 'react'
import { connect } from 'react-redux'
import { buyCake, buyIceCream } from '../redux'

function ItemContainer(props) {
    return (
        <div>
            <h2>Item - {props.item}</h2>
            <button onClick={() => props.buyItem(1)}>Buy Item</button>
        </div>
    )
}

// 可以在这里将此组件自身的props加入到参数中来
// state是指store的状态,这个需要明确
// 这是想把store的状态的某些值映射到本组件的props上来
const mapStateToProps = (state, ownProps) => {
    const itemState = ownProps.cake 
            ? state.cake.numOfCakes 
            : state.iceCream.numOfIceCream
    return {
        item: itemState
    }
}

// 如果函数被调用,则返回的是结果,已经不是函数,需要再用箭头函数组装
const mapDispatchToProps = (dispatch, ownProps) => {
    const dispatchFunction = ownProps.cake 
            ? () => dispatch(buyCake(1)) 
            : () => dispatch(buyIceCream(1))
    return {
        buyItem: dispatchFunction
    }
}

// 连接后,在本组件就可以使用映射到此组件的props上的内容了
export default connect(mapStateToProps, 
    mapDispatchToProps)
(ItemContainer)

onClick={xxx}中,xxx要给出的是函数名,如果是要执行函数,即带上括号,则不行。因为带上括号表示当下就执行此函数,返回的是结果。

mapDispatchToProps函数中,dispatchFunction是需要返回的函数,如果:

const mapDispatchToProps = (dispatch, ownProps) => {
    const dispatchFunction = ownProps.cake 
            ? dispatch(buyCake(1)) 
            : dispatch(buyIceCream(1))
    return {
        buyItem: dispatchFunction
    }
}

这种,返回的键buyItem对应的不是个函数,而是函数执行的结果了。

所以需要用() => dispatch(buyXXX())重新组装为函数方可。

另外,在connect中,如果只有mapDispatchToProps,则第一个参数需要设置为null

END.

相关文章

  • 19-mapDispatchToProps的第二个参数

    Time: 20200130 关于返回函数和函数执行 在onClick={xxx}中,xxx要给出的是函数名,如果...

  • 原型式继承:object.create()

    Object.create()方法的第二个参数与Object.defineProperties()方法的第二个参数...

  • python入门(十四)m、n、o 开头的函数

    map() 第一个参数function 方法 第二个参数 iterable 一个或多个序列 作用:第二个参数的每个...

  • Unity编辑器扩展(一)

    一、[MenuItem("--路径--")] MenuItem第二个参数 MenuItem第二个参数表示这个是否启...

  • 3.函数

    parseInt() 方法接收两个参数,第二个参数为转换的进制。如果不传第二个参数,当第一个参数传 以0开头的数字...

  • Python opencv第1个程序:读取、写入图片

    1、读取图片 第一个参数:图片名 第二个参数: 2、写入图片 • 第一个参数:要保存的文件名• 第二个参数:是要保...

  • v-for获取键名

    传三个参数第二个为键名传两个参数第二个为i下标

  • view 部分设置圆角

    关于参数: 第二个参数byRoundingCorners:(UIRectCorner)corners允许指定矩形的...

  • loadsh 常用方法解析

    _.pick根据第二个参数的key的数组,筛选第一个参数中的值并返回 _.pickBy根据第二个参数条件,筛选出符...

  • 深入理解ES6三

    参数 ES6简化了为形式参数提供默认值的过程 上面的函数只有当不为第二个参数传入值或者主动为第二个参数传入unde...

网友评论

    本文标题:19-mapDispatchToProps的第二个参数

    本文链接:https://www.haomeiwen.com/subject/jhiithtx.html