Encontrei uma biblioteca javascript que usa a seguinte sintaxe para importar bibliotecas:
import React, { Component, PropTypes } from 'react';
Qual é a diferença entre o método acima e o seguinte?
import React, Component, PropTypes from 'react';
javascript
ecmascript-6
es6-modules
Raposa
fonte
fonte
Respostas:
Isso diz:
Isso combina as duas sintaxes comuns que você provavelmente já viu
O primeiro sendo usado para importar e nomear a exportação padrão, o segundo para importar as exportações nomeadas especificadas.
Como regra geral, a maioria dos módulos fornecerá uma exportação única padrão ou uma lista de exportações nomeadas. É um pouco menos comum para um módulo fornecer uma exportação padrão e exportações nomeadas. No entanto, no caso em que há um recurso que é mais comumente importado, mas também sub-recursos adicionais, é um design válido exportar o primeiro como o padrão e os restantes como exportações nomeadas. É nesses casos que você usaria a
import
sintaxe à qual se refere.As outras respostas estão entre erradas e confusas, possivelmente porque os documentos MDN no momento em que esta pergunta foi feita estavam errados e confusos. MDN mostrou o exemplo
e dito
name
é o "nome do objeto que receberá os valores importados." Mas isso é enganoso e incorreto; em primeiro lugar, há apenas um valor de importação, que será "recebido" (por que não dizer apenas "atribuído a" ou "usado para se referir a")name
, e o valor de importação neste caso é a exportação padrão do módulo .Outra maneira de explicar isso é observar que a importação acima é precisamente idêntica a
e o exemplo do OP é precisamente idêntico ao
A documentação MDN passou a mostrar o exemplo
e afirmou que significa
O que o MDN disse aqui e o que outras respostas afirmam com base na documentação incorreta do MDN estão absolutamente errados e podem ser baseados em uma versão anterior da especificação. O que isso realmente faz é
(A exportação de módulo padrão é o valor exportado com a
export default
sintaxe, que também pode serexport {foo as default}
.)Os escritores da documentação MDN podem ter se confundido com a seguinte forma:
Isso importa todas as exportações de
my-module
e as torna acessíveis com nomes comoMyModule.name
. A exportação padrão também está acessível comoMyModule.default
, uma vez que a exportação padrão nada mais é do que outra exportação nomeada com o nomedefault
. Nesta sintaxe, não há como importar apenas um subconjunto das exportações nomeadas, embora seja possível importar a exportação padrão, se houver, junto com todas as exportações nomeadas, comfonte
from '/path/to/my-module.js'
, embora eu pessoalmente usefrom '/path/to/my-module'
.Isso pegará os
{ Component, PropTypes }
membros exportados do'react'
módulo e os atribuirá aComponent
ePropTypes
, respectivamente.React
será igual ao do módulodefault
exportação .Conforme observado por torazaburo abaixo , este é o mesmo que
que é uma abreviatura para
Aqui está outro exemplo ( link para a essência ):
Testei o segundo exemplo com babel:
e obteve um erro de sintaxe.
Para referência, você pode ler sobre a nova
import
documentação do MDN. No entanto, ele aparentemente precisa de uma revisão técnica.A postagem do blog do Dr. Axel Rauschmayer é uma referência melhor por enquanto.fonte
React
e as exportações nomeadasComponent
ePropTypes
variáveis com o mesmo nome. Infelizmente, os documentos MDN estão errados, como você descobriria se tentasse. Consulte 2ality.com/2014/09/es6-modules-final.html . Além disso, a sintaxe de importação não tem absolutamente nada a ver com atribuição de desestruturação.import
documentação", revisando o histórico de revisão daquele artigo MDN, as partes que você está citando não foram revisadas desde que a página foi escrita pela primeira vez há mais de um ano, um período durante o qual a sintaxe do módulo foi mudando rapidamente.example3.js
por que ele imprimirundefined
paraconsole.log(d)
? Depois de fazerexport default { a, b, d }
isso, você o exportou paramyModule.js
.myModule.js
, nota quea
,b
ec
foram exportados individualmente. Isso significa que outro arquivo pode importá-los diretamente comimport { a } from 'myModule'
. Por outro lado,d
só está disponível por meio da exportação padrão, portanto outro módulo pode acessá-lo de duas formas:import thisObjectContainsDefault from 'myModule'
e acessá-lo viathisObjectContainsDefault.d
ORimport { default as wrapperObject }
ewrapperObject.d
. O benefício da segunda abordagem é que você também pode obter itens que foram exportados individualmente, como pode ser visto emexample3.js
.