用于bindActionCreators的Redux文档指出:
唯一的用例
bindActionCreators
是,当您要将一些操作创建者传递给一个不了解Redux的组件,并且您不想将调度或Redux存储传递给该组件时。
在哪里bindActionCreators
使用/需要一个示例?
哪种组件不知道Redux?
两种选择的优点/缺点是什么?
//actionCreator
import * as actionCreators from './actionCreators'
function mapStateToProps(state) {
return {
posts: state.posts,
comments: state.comments
}
}
function mapDispatchToProps(dispatch) {
return bindActionCreators(actionCreators, dispatch)
}
与
function mapStateToProps(state) {
return {
posts: state.posts,
comments: state.comments
}
}
function mapDispatchToProps(dispatch) {
return {
someCallback: (postId, index) => {
dispatch({
type: 'REMOVE_COMMENT',
postId,
index
})
}
}
}
的一种可能用法
bindActionCreators()
是将多个动作“映射”在一起作为一个道具。常规调度如下所示:
将几个常见的用户操作映射到道具。
在较大的项目中,单独映射每个调度可能会感到笨拙。如果我们有一堆彼此相关的动作,我们可以将这些动作组合在一起。例如,一个用户操作文件执行了各种不同的用户相关操作。除了可以将每个操作作为单独的调度调用外,我们可以使用
bindActionCreators()
代替dispatch
。使用bindActionCreators()的多个调度
导入所有相关动作。它们可能全部都在redux存储中的同一文件中
现在,不使用调度,而是使用bindActionCreators()
现在,我可以使用道具
userAction
来调用组件中的所有动作。IE:
userAction.login()
userAction.editEmail()
或this.props.userAction.login()
this.props.userAction.editEmail()
。注意:您不必将bindActionCreators()映射到单个道具。(
=> {return {}}
映射到的其他userAction
)。您还可以bindActionCreators()
将单个文件的所有操作映射为单独的道具。但是我发现这样做可能会造成混淆。我更喜欢为每个动作或“动作组”指定一个明确的名称。我还想命名该名称,ownProps
以更加描述这些“儿童道具”的含义或来源。当使用Redux + React时,会在提供所有道具的地方有些混乱,因此描述性越强越好。