【问题标题】:How is Component exported with React? Named vs DefaultReact 如何导出组件?命名与默认
【发布时间】:2020-03-21 08:05:30
【问题描述】:

我在很多文件中都看到过这种语法:

import React, {Component} from react;

我了解命名导出和默认导出如何分别工作,但我不确定 React 在导出代码时如何处理这个问题。

例如,默认 React 是否导出一个包含组件作为命名导出函数的对象?这就是为什么你可以使用 React.Component 点符号?

【问题讨论】:

  • 也许这个文件回答了你的问题:github.com/facebook/react/blob/master/packages/react/src/…
  • "是默认导出对象" - 是的。 “...包含组件” - 是的。 “…as a named export” - 呃,不,一个对象包含未命名为 export 的对象属性?
  • @ClaireLin 真的值得单独回答。我会投票
  • @Bergi 那么在这种情况下,对象的属性是否隐式导出,以便它们可以用作命名导入?在我阅读的一些关于模块的教程中,我没有遇到过这个问题。
  • @jobe 不,模块中没有任何隐含的内容,如果您想将某些内容同时导出为默认导出对象的属性和命名导出,那么您需要明确地这样做。但是,似乎React doesn't use ES6 exports at all 并依赖于编译器来确定导入。 React 是 ES6 模块使用的一个非常糟糕的例子,当最佳实践没有完全弄清楚时,他们是早期采用者,现在他们无法改变他们正在做的事情以实现向后兼容性。

标签: javascript reactjs ecmascript-6 module


【解决方案1】:

正如您提到的,React 是默认的模块导出,而 Component 包含在 React 模块中。因此,您可以通过方法调用 React.Component 来使用 Component,也可以使用 import {Component} 作为单独的函数将其导入 current scope

编辑:查看React GitHub 的第 17 行。它已经导入到 React.js 中,因此您可以通过不同的方式导入模块。

从 './ReactBaseClasses' 导入 {Component, PureComponent};

【讨论】:

    猜你喜欢
    • 2019-09-07
    • 2019-05-08
    • 2020-02-03
    • 2018-10-12
    • 2016-08-02
    • 2020-02-23
    • 2022-01-18
    • 2017-07-09
    • 2018-04-14
    相关资源
    最近更新 更多