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的提醒,我无法再次编辑评论,所以我只是重新发布了带有更正的评论)。