ES6解构和模块导入

Guy*_*Guy 51 javascript destructuring ecmascript-6 es6-modules

我的印象是这种语法:

import Router from 'react-router';
var {Link} = Router;
Run Code Online (Sandbox Code Playgroud)

具有与此相同的最终结果:

import {Link} from 'react-router';
Run Code Online (Sandbox Code Playgroud)

有人可以解释一下有什么区别吗?

(我原本以为这是一个React Router Bug.)

Fel*_*ing 80

import {Link} from 'react-router';
Run Code Online (Sandbox Code Playgroud)

从中导入命名导出react-router,例如

export const Link = 42;
Run Code Online (Sandbox Code Playgroud)
import Router from 'react-router';
const {Link} = Router;
Run Code Online (Sandbox Code Playgroud)

Link默认导出中拉出属性,假设它是一个对象,例如

export default {
  Link: 42
};
Run Code Online (Sandbox Code Playgroud)

(默认导出实际上只是一个名为"default"的标准命名导出).

另见exportMDN.

完整的例子:

// react-router.js
export const Link = 42;
export default {
  Link: 21,
};


// something.js
import {Link} from './react-router';
import Router from './react-router';
const {Link: Link2} = Router;

console.log(Link); // 42
console.log(Link2); // 21
Run Code Online (Sandbox Code Playgroud)

使用Babel 5及以下版本,我相信它们已经可以互换,因为ES6模块已被转换为CommonJS.但就语言而言,这是两种不同的结构.

  • 很好的答案.导入命名导出的语法很容易与对象的解构语法混淆. (5认同)

Dev*_*ode 5

去做这个:

import {purple, grey} from 'themeColors';
Run Code Online (Sandbox Code Playgroud)

无需重复export const每个符号,只需执行以下操作:

export const
  purple = '#BADA55',
  grey = '#l0l',
  gray = grey,
  default = 'this line actually causes an error';
Run Code Online (Sandbox Code Playgroud)