我正在用React学习Redux,偶然发现了这段代码.我不确定它是否是Redux特定的,但我在其中一个示例中看到了以下代码片段.

@connect((state) => {
  return {
    key: state.a.b
  };
})

虽然connect的功能非常简单,但我不理解connect之前的@.如果我没有错的话,它甚至不是一个JavaScript操作符.

有人能解释一下这是什么吗?为什么要用它?

更新:

它实际上是react-redux的一部分,用于将React组件连接到Redux存储.

推荐答案

@符号实际上是一个JavaScript表达式currently proposed to signify decorators:

decorator 使在设计时注释和修改类和属性成为可能.

下面是一个设置Redux的示例,其中没有装饰者和有装饰者:

Without a decorator

import React from 'react';
import * as actionCreators from './actionCreators';
import { bindActionCreators } from 'redux';
import { connect } from 'react-redux';

function mapStateToProps(state) {
  return { todos: state.todos };
}

function mapDispatchToProps(dispatch) {
  return { actions: bindActionCreators(actionCreators, dispatch) };
}

class MyApp extends React.Component {
  // ...define your main app here
}

export default connect(mapStateToProps, mapDispatchToProps)(MyApp);

Using a decorator

import React from 'react';
import * as actionCreators from './actionCreators';
import { bindActionCreators } from 'redux';
import { connect } from 'react-redux';

function mapStateToProps(state) {
  return { todos: state.todos };
}

function mapDispatchToProps(dispatch) {
  return { actions: bindActionCreators(actionCreators, dispatch) };
}

@connect(mapStateToProps, mapDispatchToProps)
export default class MyApp extends React.Component {
  // ...define your main app here
}

上面的两个例子都是等价的,这只是一个偏好问题.此外,修饰器语法还没有内置到任何Javascript运行时中,它仍然是试验性的,可能会发生变化.如果你想用它,用Babel就可以买到.

Javascript相关问答推荐

为什么不能在静态初始化块中设置JavaScript类构造函数的名称?

使用jQuery在 bootstrap 网格中添加/删除元素并防止删除第一个元素

通过JavaScript将CSS与音频大声噪音同步

我应该如何在此Angular 16应用程序中的方法中使用@ Hostspel?

验证嵌套 colored颜色 代码的结果

try 在addEventHandler内设置表单的文件输入.值=空

vue3类型脚本中可能未定义对象''

以逗号分隔的列表来数组并填充收件箱列表

将状态向下传递给映射的子元素

为什么这个JS模块在TypeScript中使用默认属性导入?""

函数返回与输入对象具有相同键的对象

当试图显示小部件时,使用者会出现JavaScript错误.

Regex结果包含额外的match/group,只带一个返回

cypress中e2e测试上的Click()事件在Switch Element Plus组件上使用时不起作用

ChartJs未呈现

将核心模块导入另一个组件模块时存在多个主题

使用Nuxt Apollo在Piniastore 中获取产品细节

Rxjs流中生成IMMER不能在对象上操作

将对象推送到数组会导致复制

我正在试着做一个TicTacToe Ai来和我玩.但是,我试着在第一个方块被点击时出现一个X,然后在第二个方块之后出现一个O