javascript - 导出默认值和导出{默认}之间的区别

标签 javascript reactjs ecmascript-6

我一直在 React 中广泛使用命名导出和默认导出,并且遇到了这两种类似的语法。

从“./Button”导出默认值;

从“./Button”导出{default};

有人可以告诉我他们有什么区别吗?看起来他们正在对以前的 VSCode Go To Definition 功能做同样的事情,但在前者上不起作用。

最佳答案

有什么区别

两者之间存在巨大差异,一个是标准 ES6,另一个是提案。

// Standard ES6
export { default } from './Button';

这是标准的 ES6:它从当前模块导出 Button 的默认值(不改变当前模块的本地范围)

// A Proposal
export default from './Button';

这是一个提案,这解释了为什么它在 vscode 上不起作用 这是建议https://github.com/tc39/proposal-export-default-from (仍为第一阶段)

基本上,根据提案,两者的工作原理应该完全相同,该提案只是另一种更优雅的编写方式 - 因此它与我们在 Standard ES6 中导出默认值的方式相匹配。

如果您想了解提案作者提出该提案的具体原因,请查看此处 https://github.com/tc39/proposal-export-default-from#common-concerns

为什么它们都有效

当今常用的 JavaScript 不再只是一种解释性语言。它更像是一种转译语言,我们编写的内容(尽管是 JavaScript 或类似的内容)仍然与我们为 JS 引擎发送的内容不同。

现在它对您有用(在您的代码中),因为您的构建系统的一部分正在采用使用此提案编写的代码并将其转换为标准 ES6。如果我们要谈论 Babel 最流行的 JS 转译器,则可以使用以下插件启用此语法 https://babeljs.io/docs/en/next/babel-plugin-proposal-export-default-from.html .

我应该继续使用该提案

最好不,这是状态 1 中的提案,即使 Babel - 或任何其他转译器 - 使其工作,它也有可能永远不会成为标准 JavaScript。如果发生这种情况,将来您将不得不重新编写该代码。

关于javascript - 导出默认值和导出{默认}之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57919125/

相关文章:

java - 我们可以使用 Dukescript 作为小程序的替代品吗?

javascript - 有没有更干净的方法来停止初始加载时的 React 渲染?

javascript - 如何将.css和.js与ReactJS + Redux架构集成?

Javascript ES6 粗箭头空参数 f 而不是 ()

javascript - javascript 中日期范围内的每小时分钟数

javascript - Aurelia Jspm 加载外部库

javascript - 我正在开发一个phonegap应用程序,但它无法连接我附加以下程序的数据库?

javascript - React-chartjs错误无法读取未定义的属性 'Chart'

javascript - 使用 Javascript 中的赋值运算符将一个对象设置为另一个对象

javascript - "npm start"抛出错误 : Plugin/Preset files are not allowed to export objects, 仅功能