【问题标题】:What is the use of @connect decorator in react-reduxreact-redux 中 @connect 装饰器有什么用
【发布时间】:2016-04-11 16:06:06
【问题描述】:

我正在学习 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。我几乎了解所有内容,但我无法理解:

  • connect 有什么作用?我知道你必须传递 4 个参数(不过我无法准确地知道这 4 个变量是什么)。
  • @connect装饰器的实现如何,代码转译后的样子?

提前致谢:)

【问题讨论】:

  • Redux 和 react-redux 文档在这个主题上非常完整。关于 connect 为您做什么:redux.js.org/docs/basics/UsageWithReact.html,关于 connect 的 API 以及四个参数是什么:github.com/reactjs/react-redux/blob/master/docs/…
  • 嗯,我从同一个链接了解了 4 个参数,但我无法从那里正确理解,这就是为什么我在这里问一个问题 :) :)
  • 好的,我会发布一个快速的答案,但我怀疑我能比文档做得更好! :)
  • 我要补充一点,官方文档从不在任何地方使用装饰器,因为它是一个不稳定的特性,以后可能会改变。不要使用它,除非有一天你能接受它。

标签: reactjs redux react-redux


【解决方案1】:

Redux 将应用程序的状态保存在一个名为 store 的对象中。 connect 允许您将 React 组件连接到商店的状态,即将您的商店状态作为props 传递给它们。

没有装饰器语法,你的组件的导出看起来像

export default connect(state => ({todos: state.todos}))(Home);

它的作用是获取您的组件(此处为 Home)并返回一个正确连接到您的商店的新组件。

这里的连接意味着:你接收到商店的状态为props,当这个状态被更新时,这个新的连接组件接收到新的道具。 Connected 也意味着您可以访问 store 的 dispatch 函数,该函数允许您改变 store 的状态。

四个参数是:

  • ma​​pStateToProps您可能不想在所有连接的组件中注入所有商店的状态。此函数允许您定义您感兴趣的状态切片,或作为props 传递来自商店状态的新数据。您可以执行state =&gt; ({todosCount: state.todos.length}) 之类的操作,而Home 组件将收到todosCount 属性

  • ma​​pDispatchToProps 对调度函数执行相同的操作。你可以做类似dispatch =&gt; ({markTodoAsCompleted: todoId =&gt; dispatch(markTodoAsCompleted(todoId))})

  • mergeProps 允许您定义一个自定义函数来合并组件接收的道具,来自mapStateToProps 的道具和来自mapDispatchToProps 的道具

    李>
  • 选项好吧,一些选项……

【讨论】:

  • @BharatSoni 装饰器语法解释:它将你的类声明重写为connect(connectOptions)(MyComponent),仅此而已。 connect 返回一个将组件作为参数并返回一个新组件的函数。其余的,这不是复制粘贴,但无论如何,对不起,如果它对您的帮助超过文档,我已经尽力了:)
  • 非常感谢您对 React with Redux 的精彩解释,这是迄今为止最好的解释。
猜你喜欢
  • 2016-10-12
  • 2019-03-07
  • 2018-07-19
  • 2020-01-21
  • 2017-04-02
  • 2016-06-04
  • 2012-01-09
  • 2017-02-14
相关资源
最近更新 更多