2016-05-05 25 views
6

Oto dwa przykłady użycia eksportu innego niż domyślny. Pierwsza używa składni commonjs, a druga używa es6. Dlaczego pierwszy przykład działa, ale nie drugi?Import CommonJS a import ES6

// commonjs --- works! 
var ReactRouter = require('react-router') 
var Link = ReactRouter.Link 


// es6 --- doesn't work! 
import ReactRouter from 'react-router' 
var Link = ReactRouter.Link 

Rozumiem, że można używać import { Link } from 'react-router' zamiast, ale ja po prostu staramy się owinąć wokół głowy jak każdy przywozowych różni.

+1

Myślę, że też masz literówkę w swoim CommonJS, czy nie powinno to być 'var Link = ReactRouter.Link'? – CodingIntrigue

+0

Tak, chociaż to nie było problemem – Jonny

Odpowiedz

8

import ReactRouter tylko importuje domyślny eksport . Nie importuje obiektu o nazwie export, który próbujesz osiągnąć w kodzie ES6. Jeśli nie ma domyślnego eksportu w module, ten będzie undefined.

Jak podano, import { Link } from 'react-router' jest dedykowaną składnią do importowania pojedynczego o nazwie export.

Jeśli chcesz zaimportować wszystkie nazwany Eksportuje do obiektu, można użyć składni import..as:

import * as ReactRouter from 'react-router'; 
var Link = ReactRouter.Link 

MDN ma super pomocny listę wszystkich różnych rodzajów importu i jak działają .

+0

Więc 'var ReactRouter = require ('router-router')' jest równoważne 'importowi * jako ReactRouter z 'routera-reagenta''? – Jonny

+1

@ Jonny Dokładnie. – CodingIntrigue