Reactjs mapDispatchToProps:有什么问题吗?

Reactjs mapDispatchToProps:有什么问题吗?,reactjs,react-native,redux,react-redux,Reactjs,React Native,Redux,React Redux,我想知道今天使用mapDispatchToProps是否还有意义。 我正在编写(构建待办事项列表),其中VisibleTodoList描述为: import { connect } from 'react-redux' import { toggleTodo } from '../actions' import TodoList from '../components/TodoList' const getVisibleTodos = (todos, filter) => { swi

我想知道今天使用
mapDispatchToProps是否还有意义。
我正在编写(构建待办事项列表),其中
VisibleTodoList
描述为:

import { connect } from 'react-redux'
import { toggleTodo } from '../actions'
import TodoList from '../components/TodoList'

const getVisibleTodos = (todos, filter) => {
  switch (filter) {
    case 'SHOW_ALL':
      return todos
    case 'SHOW_COMPLETED':
      return todos.filter(t => t.completed)
    case 'SHOW_ACTIVE':
      return todos.filter(t => !t.completed)
  }
}

const mapStateToProps = (state) => {
  return {
    todos: getVisibleTodos(state.todos, state.visibilityFilter)
  }
}

const mapDispatchToProps = (dispatch) => {
  return {
    onTodoClick: (id) => {
      dispatch(toggleTodo(id))
    }
  }
}

const VisibleTodoList = connect(
  mapStateToProps,
  mapDispatchToProps
)(TodoList)

export default VisibleTodoList
然而,今天我被告知,我不能简单地定义
mapDispatchToProps
并通过以下方式连接所有内容:

const VisibleTodoList = connect(
  mapStateToProps,
  toggleTodo
)(TodoList)
是这样吗?如果是这样,那么编写
mapDispatchToProps
有什么意义?简单地返回操作有什么缺点吗

谢谢

connect()将自动将分派绑定到作为函数名对象传入的操作

因此,不需要实现MapStateTops。相反,您可以像这样传递操作:

export default connect((state) => state, {
  action1,
  action2,
})(MyComponent);

要澄清另一个标记的评论:

connect()
的第二个参数可以采用两种主要形式。如果将函数作为参数传递,
connect()
假定您希望自己处理分派准备,使用
dispatch
作为参数调用函数,并将结果合并到组件的道具中

如果将一个对象作为第二个参数传递给
connect()
,它会假定您已经为它提供了一个到动作创建者的道具名称映射,因此它会通过
bindActionCreators
实用程序自动运行所有道具,并将结果用作道具

但是,正如您的示例所显示的那样,将单个动作创建者作为第二个参数传递并不能满足您的要求,因为
connect()
会将其解释为一个准备函数,而不是需要绑定的动作创建者

因此,是的,
connect()
支持将一个充满动作创建者的对象作为第二个参数传入的速记语法,但是传入实际的
mapDispatchToProps
函数来自己做事情仍然有很好的使用案例(特别是如果您的dispatch prep在某种程度上依赖于实际的道具值)


您可能需要参考。

啊。。。为什么说
mapDispatch
需要三个参数?根据消息来源,它只会被一个或两个调用。只想添加最后一行,特别是如果你的调度准备在某种程度上依赖于实际道具值,这正是我仍然自己准备一些动作创建者的原因。事实上,很少有人说mapDispatchToProps实际上有两个参数,第二个是ownProps,在这里我可以从容器对象props将默认参数注入到动作创建者中,而不必将它们传递给子组件。(感谢markerikson的提醒,我无法再次编辑评论,所以我只是重新发布了带有更正的评论)。