19-mapDispatchToProps的第二个参数

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.

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 今天来看一下react组件之间是怎么进行通讯的。react推崇的是单向数据流,自上而下进行数据的传递,但是由下而上...
    亲亲qin阅读 6,082评论 2 12
  • Redux 首先,redux并不是必须的,它的作用相当于在顶层组件之上又加了一个组件,作用是进行逻辑运算、储存数据...
    FE_study阅读 581评论 0 1
  • 最全的iOS面试题及答案 iOS面试小贴士 ———————————————回答好下面的足够了-----------...
    zweic阅读 2,804评论 0 73
  • 一:base.h 二:block.h 1. dispatch_block_flags:DISPATCH_BLOCK...
    小暖风阅读 2,800评论 0 0
  • 姓名 :李飞 企业名称 :临沂鑫道食品有限公司 组别 373期 利他1组 【日精进打卡第162天】 【知~学习】 ...
    李飞720阅读 119评论 0 0

友情链接更多精彩内容