与 mapDispatchToProps 相比,注入 actionCreators 有什么好处?

What's the benefit of injecting actionCreators versus a mapDispatchToProps?

我正在浏览 connect docs 并试图理解这个例子:

Inject todos and all action creators

import * as actionCreators from './actionCreators'

function mapStateToProps(state) {
  return { todos: state.todos }
}

export default connect(mapStateToProps, actionCreators)(TodoApp)

为什么这里不需要mapDispatchToPropsdispatch在哪里?

我理解操作,dispatch,和 mapDispatchToProps,但我对 Action Creators 和上面的语法有点模糊。

您可以通过 ObjectFunction:

如果传递了一个对象,其中的每个函数都被假定为一个 Redux 动作创建者。 Connect 将为您将动作创作者绑定到 dispatch

import * as actionCreators from './actionCreators';

connect(mapStateToProps, actionCreators)(TodoApp)

然后在组件

this.props.someActionCreator();

如果一个函数被传递,它将被调度。 return 一个以某种方式使用 dispatch 以您自己的方式绑定动作创建者的对象取决于您。你可以使用 Redux 的 bindActionCreators() 助手。 如果将 ownProps 指定为第二个参数,它的值将是传递给组件的道具,并且只要组件收到新道具,就会重新调用 mapDispatchToProps

function mapDispatchToProps(dispatch) {
  return { actions: bindActionCreators(actionCreators, dispatch) }
}

如果省略它,默认实现只是将 dispatch 注入组件的 props。

然后在组件中:

this.props.dispatch(someActionCreator());

source react-redux DOCS

因此,通过函数注入actionCreators的对象的好处,是将actionCrators传递给component

更方便和简洁的形式