MapDispatchToProps不会返回一个对象

时间:2017-12-25 14:53:04

标签: reactjs react-redux

如果我创建自己的 mapDispatchToProps 功能,它就不起作用了。如果我提供一个普通的连接对象然后它确实有效,但我需要调度功能..例如每页加载翻译,我在这里做错了吗?

const mapStateToProps = (state) => { 

    const { isFetching, lastUpdated, items, errors } = state.transactions; // fetch from redux state ;)

    return {
        translate: getTranslate(state.locale),
        isFetching,
        lastUpdated,
        items,
        errors
    }
} 
const mapDispatchToProps = dispatch => {

    return { 
        fetchTransactionsIfNeeded, 
        invalidateList 
     }
}
export default connect(mapStateToProps, mapDispatchToProps)(Transactions);

以下代码可以使用

const mapStateToProps = (state) => { 

    const { isFetching, lastUpdated, items, errors } = state.transactions; // fetch from redux state ;)

    return {
        translate: getTranslate(state.locale),
        isFetching,
        lastUpdated,
        items,
        errors
    }
} 

export default connect(mapStateToProps, { 
       fetchTransactionsIfNeeded, 
       invalidateList 
})(Transactions);

1 个答案:

答案 0 :(得分:1)

根据redux文档

  

[mapDispatchToProps(dispatch,[ownProps]):dispatchProps](对象或函数): 如果传递了一个对象,其中的每个函数都是   假设是Redux动作创建者。具有相同功能的对象   名称,但每个动作创建者都包含在一个调度调用中   它们可以直接调用,将​​合并到组件中   道具。

     

如果传递了一个函数,它将作为第一个函数发送   参数。你可以归还一个以某种方式使用的对象   发送以您自己的方式绑定动作创建者。 (提示:你可以使用   来自Redux的bindActionCreators()帮助器。)

在第一种情况下,当您实现mapDispatchToProps时,您将返回一个普通对象,但是您需要在其中使用dispatch,因为它不会被redux假定为动作创建者。

你会像

那样实现它
const mapDispatchToProps = dispatch => {

    return { 
        fetchTransactionsIfNeeded: (...args) => {
               dispatch(fetchTransactionsIfNeeded(...args))
         }, 
        invalidateList: (...args) => {
               dispatch(invalidateList(...args))
         },
     }
}

或者不要将其创建为函数,而只是创建一个对象

const mapDispatchToProps = { 
       fetchTransactionsIfNeeded, 
       invalidateList 
}