2015-11-04 13 views
36

ES6な破壊と、私はこの構文という印象の下にあったモジュールの輸入

import Router from 'react-router'; 
var {Link} = Router; 

は、これと同じ最終結果があります。

import {Link} from 'react-router'; 

は、誰かが違いとは何かを説明できますか?

(私はもともとそれがReact Router Bugだと思った。)

+3

を残念ながら彼らは同じ速記構文を持っていますが、あなたは彼らの長い形式をチェックすると、彼らは明らかに異なっています: 'var {" Link ":Link} =ルータ;' vs 'import {link as Link} '...'; ' – Bergi

答えて

60
import {Link} from 'react-router'; 

export const Link = 42; 

import Router from 'react-router'; 
const {Link} = Router; 

のようなものは、財産を引き出しすなわち、react-routerからという名前の輸出をインポートLinkデフォルトのエクスポートは、それがオブジェクトであると仮定します。

export default { 
    Link: 42 
}; 

(デフォルトのエクスポートは、名前が「デフォルト」の標準化された名前付きエクスポートだけです)。

export on MDNも参照してください。

コンプリート例:バベル5とし、以下の

// 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 

は、私は、彼らがためES6モジュールはCommonJSにtranspiledされている方法で交換されていると信じています。しかし、それらは言語が進む限り、2つの異なる構成要素です。これを行うために

+3

素晴らしい答えです。名前付きエクスポートをインポートする構文は、オブジェクトの構文を解体するために非常に簡単に混乱します。 – Federico

+0

バベル6は、2つを入れ替えることはできません。注意してください! – sdgfsdh

4

:シンボルごとexport constを繰り返すことなく

import {purple, grey} from 'themeColors'; 

は、単に実行します。

export const 
    purple = '#BADA55', 
    grey = '#l0l', 
    gray = grey, 
    default = 'this line actually causes an error'; 
関連する問題