在react-redux中@connect装饰器有什么用

2023-12-30

我正在学习 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 将应用程序的状态保存在一个称为 store 的对象中。connect允许您将 React 组件连接到商店的状态,即将商店的状态传递给它们props.

如果没有装饰器语法,您的组件的导出将如下所示

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

它的作用是它需要你的组件(这里Home)并返回一个正确连接到您的商店的新组件。

此处连接意味着:您收到的商店状态为props,当这个状态更新时,这个新的连接组件会收到新的 props。连接还意味着您可以访问商店的dispatch函数,它允许您改变商店的状态。

这四个论点是:

  • 映射状态到属性您可能不想将商店的所有状态注入所有连接的组件中。此函数允许您定义您感兴趣的状态切片,或作为传递props来自商店状态的新数据。你可以做类似的事情state => ({todosCount: state.todos.length})Home组件将收到todosCount prop

  • 映射调度到属性对调度函数做同样的事情。你可以做类似的事情dispatch => ({markTodoAsCompleted: todoId => dispatch(markTodoAsCompleted(todoId))})

  • 合并属性允许您定义一个自定义函数来合并您的组件接收的道具,这些道具来自mapStateToProps以及那些来自mapDispatchToProps

  • options好吧,一些选择……

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在react-redux中@connect装饰器有什么用 的相关文章

随机推荐

  • 如何使用compress.js进行多张图片的压缩、预览和上传?

    我一直在使用压缩 js https github com fieldchat client compress用于单个图像上传 但是 现在我想用它来上传多个图像 我想要实现的是从 html 输入元素中选择多个图像 然后使用该库对其进行压缩 并
  • 创建音乐中的音符图像21

    我在运行时遇到错误 from music21 import n1 note Note C4 quarterLength 1 n2 note Note A4 quarterLength 1 s stream Stream s append n
  • 具有方法的 WCF DataContract 类

    这更多的是一个哲学 最佳实践问题 而不是一个技术问题 是否有任何强有力的论据反对编写带有仅在服务器端使用的方法的 DataContract 类 或者未使用 DataMember 属性修饰的其他属性又如何呢 例如 DataContract p
  • 如何抑制 StyleCop 警告“SA1201:所有方法必须放在所有属性之后。”? [复制]

    这个问题在这里已经有答案了 可能的重复 如何抑制 StyleCop 警告 https stackoverflow com questions 3287656 how to suppress a stylecop warning 我正在编写一
  • 工厂方法模式是模板方法模式的特例吗?

    GOF 谈论 工厂方法 模式的框架 框架需要对象 但对象的实现取决于应用程序 因此创建了创建对象的抽象方法 此外 由于需要返回类型 因此定义了所需对象的接口 它定义了该对象所需的 api 实际对象是由子类 具体应用程序 创建的 这是一种创作
  • 用于在用户填写后隐藏 ploneformgen 表单的 Python 脚本。 (对于 Plone-4.3.2-64。)

    用户填写了 ploneformgen 表单后 我想使用自定义脚本适配器调用 python 脚本来更改用户的本地角色 以便他们不再看到该表单 换句话说 我想防止用户两次填写 或查看 表单 我认为执行此操作的一种方法是调用位于表单文件夹中的脚本
  • Excel VBA - 循环转置

    我有一定范围的数据 以下是示例数据 PAT PID 0 Min 3001 PAT PID 0 Mean 3754 PAT PID 0 Max 4542 CAT PID 1 Min 15004 CAT PID 1 Mean 15040 CAT
  • 我可以在 iPhone 应用程序中为 UIToolBar 提供自定义背景吗?

    是否可以为 UIToolBar 提供图像的自定义背景 而不是通常的蓝色 黑色淡出 我尝试为视图提供背景并设置 UIToolBar 的不透明度 但这也会影响其上任何 UIBarButtons 的不透明度 在这里回答我自己的问题 重写drawR
  • 如何使用 jQuery 更改选择选项上的元素类[重复]

    这个问题在这里已经有答案了 我想改变我的class value 使用 jQuery 选择选项 Example
  • 在直方图上添加数据标签 Python/Matplotlib

    我正在尝试在直方图顶部添加数据标签值 以尝试明显地显示频率 这是我现在的代码 但不确定如何编码以将值放在上面 plt figure figsize 15 10 plt hist df Age edgecolor white label d
  • 从 OnClick 中关闭 AlertDialog.Builder

    我正在尝试为用户弹出一个对话框 该对话框的主体中有两个按钮 底部有一个取消按钮 当用户单击两个按钮之一时 对话框将消失 点击 取消 只会取消对话框 取消部分工作正常 但我不知道如何手动关闭对话框 这是我的代码 public void onI
  • Eclipse 拼写检查器 - 如何删除添加的单词?

    我不小心在 Eclipse 的拼写检查词典中添加了一个我一直拼写错误的单词 我怎样才能把它再次取出来 Eclipse 将您添加的单词放入文本文件中 又称用户定义词典 您可以在以下位置找到该文件的位置窗口 gt 首选项 gt 常规 gt 编辑
  • 测量图像中像素之间的欧几里德距离的算法

    我有许多图像 其中我知道焦距 像素数 尺寸和位置 来自 GPS 它们都是采用高倾斜方式 用市售相机在地面上拍摄的 计算图像中某些像素之间的欧几里得距离的最佳方法是什么 如果确实可以的话 假设您不是在寻找完整的景观建模 而是在寻找简单的近似模
  • Protocol buffer3 和 json

    Protocol buffer v3 声称该库是 json 友好的 https developers google com protocol buffers docs proto3 json https developers google
  • JS 对象 null 检查 - 奇怪的 JS 问题[重复]

    这个问题在这里已经有答案了 想象一下这个简单的场景 我有一个变量 它可以是带有一个属性 ID 的普通 JS 对象 即一个数字或 obj 变量可以为 null 我有简单的 test 函数 它检查变量是否不为 null 并且它必须具有有效的 i
  • 使用 phpunit 时,Eloquent 查询范围返回 Builder 而不是 Model

    我有以下代码 user User findByAccountCode transaction gt account code 当我在 phpunit 上执行此代码时 它返回 Illuminate Database Eloquent Buil
  • 删除包含一组字符的类

    有没有办法删除开始或包含已定义文本字符串的类 我有几个用于背景颜色覆盖的类 bg bgwhite bgblue bgyellow 我为选择框设置了一个小 jquery 用于添加和删除元素的修改类 在本例中是 a href href 标签 我
  • 如何使用 beautifulSoup 访问 span? [复制]

    这个问题在这里已经有答案了 我想获取嵌套标签内的数字 我该怎么做 我的代码输出这个 但我想得到 40 而不是整两行 span class rankings score span 40 span 这是我的代码 from bs4 import
  • r中大量图的排列并用线连接

    我有大量的小地块需要放置在更大的地块画布中 并将小地块排列成并用线条连接它们 一个小例子如下所示 A 到 L 是独立图 给出了它们的放置坐标 绘图网格坐标 PlotgridX和plotgridY可以决定小图何时需要居中 plotcord l
  • 在react-redux中@connect装饰器有什么用

    我正在学习 React 并遵循一些教程 我遇到了这段代码 import React from react import TodosView from components TodosView import TodosForm from co