Tha*_*yen 17 reactjs react-native redux react-redux
我想知道mapDispatchToProps今天是否还有一点使用.我正在研究redux文档教程(构建一个todo列表),其中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
Run Code Online (Sandbox Code Playgroud)
但是,我被告知今天,我根本不能通过以下方式定义mapDispatchToProps和连接所有内容:
const VisibleTodoList = connect(
mapStateToProps,
toggleTodo
)(TodoList)
Run Code Online (Sandbox Code Playgroud)
这样对吗?如果是这样,写一个是mapDispatchToProps什么意思?简单地返回动作有什么缺点吗?
谢谢!
mar*_*son 24
澄清其他马克的评论:
第二个参数connect()可以采取两种主要形式.如果将函数作为参数传递,connect()假设您希望自己处理调度准备,dispatch则将函数作为参数调用,并将结果合并到组件的props中.
如果你传入一个对象作为第二个参数connect(),它假设你已经为动作创建者提供了一个道具名称的地图,因此它会通过该bindActionCreators实用程序自动运行所有这些,并将结果用作道具.
但是,如您的示例所示,将单个动作创建者作为第二个参数传递将不会执行您想要的操作,因为connect()将其解释为准备功能而不是需要绑定的操作创建者.
所以,是的,connect()支持传递一个对象全面的行动创造者作为第二个参数的简写语法,但仍有不错的使用情况通过在实际的mapDispatchToProps功能,自己做的事情(尤其是如果您的调度准备依赖于实际的道具价值某种程度上来说).
您可能想要参考`connect()的API文档.
如果将调度作为函数名的对象传入,connect()将自动将调度绑定到您的操作.
所以不,你不需要实现mapStateToProps.相反,你可以通过这样的行动:
export default connect((state) => state, {
action1,
action2,
})(MyComponent);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13205 次 |
| 最近记录: |