如果我创建自己的 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);
答案 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
}