我正在学习React,并在一些教程中遇到了以下代码:
import React from 'react'; import TodosView from 'components/TodosView'; import TodosForm from 'components/TodosForm'; import { bindActionCreators } from 'redux'; import * as TodoActions from 'actions/TodoActions'; import { connect } from 'react-redux'; @connect(state => ({ todos: state.todos })) export default class Home extends React.Component { render() { const { todos, dispatch } = this.props; return ( <div id="todo-list"> <TodosView todos={todos} {...bindActionCreators(TodoActions, dispatch)} /> <TodosForm {...bindActionCreators(TodoActions, dispatch)} /> </div> ); } }
这是一个待办事项应用程序,这是主页,它另外加载了2个小components。我几乎了解所有内容,但我却一无所获:
components
connect
@connect
提前致谢 :)
Redux将应用程序的状态保存在一个称为存储的对象中。connect允许您将React组件连接到商店的状态,也就是将您的商店状态传递给它们props。
props
如果没有装饰器语法,则组件的导出看起来像
export default connect(state => ({todos: state.todos}))(Home);
它的作用是接收您的组件(在此处Home)并返回正确连接到商店的新组件。
Home
在此处连接表示:您将以的形式接收商店的状态props,并且在更新此状态时,此新连接的组件将接收新的道具。连接也意味着您可以访问商店的dispatch功能,从而可以更改商店的状态。
dispatch
四个参数是:
mapStateToProps 您可能不想在所有连接的组件中注入商店的所有状态。此功能使您可以定义您感兴趣的状态片,或作为props从商店状态派生的新数据进行传递。你可以做类似的事情state => ({todosCount: state.todos.length}),Home组件会收到todosCount道具
state => ({todosCount: state.todos.length})
todosCount
mapDispatchToProps 对调度功能执行相同的操作。你可以做类似的事情dispatch => ({markTodoAsCompleted: todoId => dispatch(markTodoAsCompleted(todoId))})
dispatch => ({markTodoAsCompleted: todoId => dispatch(markTodoAsCompleted(todoId))})
mergeProps 允许您定义一个自定义函数,以合并组件接收的道具,来自的道具mapStateToProps和来自的道具。mapDispatchToProps
mapStateToProps
mapDispatchToProps
选项 不错,有些选项…