Javascript 语法 - 类的箭头函数

标签 javascript reactjs

在网上学习了一些教程后,我偶然发现了一些我不熟悉的奇怪的 JavasSript 语法。在此tutorial ,作者这样做了

export default ComposedComponent => class extends 

谁能给我解释一下这是什么意思吗?它看起来像一个胖箭头函数,但似乎没有任何参数。它也是多行的,但没有括号。这到底是什么意思?

最佳答案

简介:

我们“传统上”声明 ES6 类,如下所示:

export default class Apple extends Fruit { ... }

哪里Apple只是类(class)的名称。在您的示例中:

export default ComposedComponent => class extends Component { ... }

只是一个箭头函数,带有一个参数ComposedComponent ,和一个匿名类。它基本上相当于:

export default (ComposedComponent) => {
    return class extends Component {
        ...
    }
}

哪里class extends Component是一个未命名的类,它扩展了 React 的 Component .

它是什么:

这是一个高阶组件包装器。您可以将其视为包装另一个组件(组件工厂)的 React 组件。它遵循以下语法:

HigherOrderComponentFactory = WrappedComponent: React.Component => NewComponent: React.Component

哪里WrappedComponent是被包装的组件,NewComponent是返回的新的、更高阶的组件 - 均继承自 React.Component 。现在,如果您看一下 render方法:

return (
  <ComposedComponent
    {...this.props}
    subscribe={this.subscribe.bind(this)}
    subscriptionReady={this.subscriptionReady.bind(this)}
  />
);

在这里,<ComposedComponent {...this.props} />相当于:

React.createElement(ComposedComponent, this.props, null);

应用:

让我们再看一下工厂声明:

export default ComposedComponent => class extends Component { ... }

默认导出箭头函数(与上面提到的工厂相当),并有一个参数 ComposedComponent 。在这里,ComposedComponent是将由工厂包装的组件,并且 class extends Component { ... }将是新的、更高阶的组件。

在您的教程中,箭头函数(或 HOC 工厂)的调用方式如下:

SubscribeComponent(App)

App是要包装的组件,换句话说 ComposedComponent 。返回的分量是高阶分量。

有关高阶组件及其优点的更多阅读 here .

关于Javascript 语法 - 类的箭头函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40198035/

相关文章:

javascript - IE9 JavaScript 错误 : SCRIPT5007: Unable to get value of the property 'ui' : object is null or undefined

javascript - 指令是否需要列出服务?

javascript - 如何测试 react Hook 方法?

javascript - React 无法通过 prop 数组进行映射

javascript - 在新选项卡中显示来自 Azure Blob 存储容器的 PDF 文件

javascript - 动态加载 JavaScript 库并调用

javascript - 为什么监听器没有激活?

javascript - 我应该如何强制 TypeScript 理解这个数组中不会有任何空值?

reactjs - 如何在调用 API 的 Next.js 中为动态路由处理 not found 404?

reactjs - 在 Material-UI TextField 上禁用浏览器自动完成功能