import React, { Component, PropTypes } from 'react';
Isso diz:
Importe a exportação padrão'react'
com o nome React
e importe as exportações nomeadasComponent
e PropTypes
com os mesmos nomes.
Isso combina as duas sintaxes comuns que você provavelmente já viu
import React from 'react';
import { Component, PropTypes } from 'react';
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
import name from "module-name";
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
import { default as name } from "module-name";
e o exemplo do OP é precisamente idêntico ao
import { default as React, Component, PropTypes } from 'react';
A documentação MDN passou a mostrar o exemplo
import MyModule, {foo, bar} from "my-module.js";
e afirmou que significa
Importe o conteúdo de um módulo inteiro, alguns também sendo nomeados explicitamente. Isso insere myModule
(sic) foo
, e bar
no escopo atual. Observe que foo
e myModule.foo
são iguais, assim como são bar
emyModule.bar
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 é
Importe a exportação de módulo padrão e algumas exportações nomeadas explicitamente. Isso insere MyModule
, foo
e bar
no escopo atual. Os nomes de exportação foo
e nãobar
estão acessíveis viaMyModule
, que é a exportação padrão , e não um guarda-chuva que cobre todas as exportações.
(A exportação de módulo padrão é o valor exportado com a export default
sintaxe, que também pode ser export {foo as default}
.)
Os escritores da documentação MDN podem ter se confundido com a seguinte forma:
import * as MyModule from 'my-module';
Isso importa todas as exportações de my-module
e as torna acessíveis com nomes como MyModule.name
. A exportação padrão também está acessível como MyModule.default
, uma vez que a exportação padrão nada mais é do que outra exportação nomeada com o nome default
. 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, com
import myModuleDefault, * as myModule from 'my-module';