在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装饰器有什么用 的相关文章

  • ReactJS材质UI图标按钮上传文件

    我想知道如何使用 IconButton 打开目录来上传文件
  • [“类型别名”只能在 .ts 文件中使用]

    我使用命令react native init 名称项目 然后打开vscode似乎有错误消息代码 图像 这就是你需要用 VS Code 做的事情 仔细观察 gif Steps to resolve error 1 Go to extensio
  • 如何使用本机反应在选项卡导航下的页脚文本中设置图像

    我需要设置所有页面上都有图像和文本的页脚 我已经使用了 React Native TabNavigator 问题是页脚文本以大写形式显示 并且背景颜色没有更改并且无法在页脚中设置图像 tabBarPosition bottom tabBar
  • 在react js上显示浏览器后退按钮事件的警报

    我必须在 React js 上的浏览 器返回事件上显示警报 我尝试过使用addEventListener但我不确定在 React 页面中将代码放在哪里 我应该放置在任何生命周期挂钩中还是渲染中 我不知道 请帮帮我 如果您使用 React h
  • React Material ui 表无法从行获取元素

    我想使用材料 ui 库中的表进行反应 http www material ui com components table http www material ui com components table 我显示它 它工作得很好 我试图获取
  • 如何将 props 传递给模态

    我有一个购物应用程序 我可以在其中映射一些产品并将它们呈现在屏幕上 用户可以增加 减少数量 当数量达到 1 并且用户点击减少时 一些中间件会介入并询问他们是否确定要将其从购物篮中删除 如果他们单击 否 则会关闭模式并将其留在购物篮中 如果他
  • 如何覆盖 CSS 模块文件中的全局 CSS?

    让我们说在我的global css我有一个 Next js 项目的文件 flex display flex justify content center align items center height 100 我也有一个Layout j
  • React - 澄清语法混乱

    感谢您帮助我摆脱困境 我对 REACT 很陌生 显然对一些基本概念很困惑 感谢您的帮助 这是我的 app js import React from react import TodoItem from components TodoItem
  • 准备要在 npm 上发布的 React 组件

    我有一个想要在 npm 中发布的组件 我只是通过从项目中的组件文件夹导入它来进行测试 我设法发布它 但现在我得到 node modules 中出现错误 index js 模块 解析失败 意外的标记 11 8 您可能需要一个适当的 加载器来处
  • TS1128:预期声明或声明(文件结尾)

    我正在开发一个 TypeScript React 项目 刚刚习惯它 已经一年没有写过 React 了 等等 并且遇到了一个问题 当我编写此组件时 我遵循了我找到的一些文档 但我在此文件末尾收到 TS1128 预期声明或声明 错误 我无法弄清
  • 单击

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我知道如何用 jquery 做到这一点 但我被 React 困住了 每当用户点击 div 时 我如何聚焦输入字段 你需要有一个onCl
  • 反应:无效的挂钩调用。钩子只能在函数组件体内调用

    我花了两天时间试图了解错误在哪里 知道吗 App js import React useState useEffect from react import Menu from components Menu function App ret
  • React.js - 使用自定义路径运行 npm run build

    Running npm run build命令开启create react app项目在所有文件中创建一个构建文件夹和一些默认路径 例如在地图文件中 version 3 sources static js main 500cb0d9 js
  • 如何强制传单更新地图?

    当我将 Leaflet 与 React 一起使用时 我遇到了问题 据我研究 问题是 Leaflet 也想控制 DOM 渲染 现在 国家将使用与后端信息相对应的特定颜色代码 范围为1 gt 100 正确着色 但是 它每分钟更新一次 更新后 国
  • React.js 的状态基于其他状态

    我遇到了 React js 的一些问题 并且在调用 setState 时状态没有立即设置 我不确定是否有更好的方法来解决这个问题 或者这是否真的只是 React 的一个缺点 我有两个状态变量 其中一个基于另一个 原始问题的小提琴 http
  • 使用 flowtype 和 flow-types 输入 redux store

    我想输入 redux store https github com jhegedus42 egghead redux playaround blob a51c4d6cf338dce9d2bb02322ed26db14745be53 src
  • React - 通过 css 模块全局使用 Bootstrap

    反应和所有这些东西都很新 所以我在这里需要一些帮助 我最近添加了https github com gajus babel plugin react css modules https github com gajus babel plugi
  • 使用 React Router 路由到另一个组件时 CSS 不会改变

    当我使用以下命令将我的应用程序路由到另一个组件时反应路由器 DOM https www npmjs com package react router dom CSS 不会改变 这是演示代码的简约版本 App js import React
  • 无法在react-native android中设置ShadowColor

    环境 环境 操作系统 macOS High Sierra 10 13 1 节点 8 9 1 纱线 0 17 10 npm 5 6 0 守望者 4 7 0 Xcode Xcode 9 2 内部版本 9C40b Android Studio 2
  • 如何调用另一个组件中的方法并传递查询参数

    这是我的问题 我有一个下拉菜单 其中包含选项列表 选择一个选项后 将打开一个新选项卡 其中包含该特定选项的 Tableau 仪表板 由于我需要向后端发送查询字符串 Option ID 我该如何解决查询参数问题 这是我的下拉组件 import

随机推荐

  • 如何使用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