import React, { Component, PropTypes } from 'react';
Esto dice:
Importe la exportación predeterminada'react'
con el nombre React
e importe las exportaciones con nombreComponent
y PropTypes
con los mismos nombres.
Esto combina las dos sintaxis comunes que probablemente hayas visto
import React from 'react';
import { Component, PropTypes } from 'react';
El primero se utiliza para importar y nombrar la exportación predeterminada, el segundo para importar las exportaciones con nombre especificadas.
Como regla general, la mayoría de los módulos proporcionarán una única exportación predeterminada o una lista de exportaciones con nombre. Es algo menos habitual para un módulo para proporcionar tanto una exportación por defecto y las exportaciones con nombre. Sin embargo, en el caso de que haya una característica que se importe con mayor frecuencia, pero también subcaracterísticas adicionales, es un diseño válido exportar la primera como predeterminada y las restantes como exportaciones con nombre. En tales casos, utilizaría la import
sintaxis a la que se refiere.
Las otras respuestas están en algún lugar entre incorrectas y confusas, posiblemente porque los documentos de MDN en el momento en que se hizo esta pregunta eran incorrectos y confusos. MDN mostró el ejemplo
import name from "module-name";
y dicho name
es el "nombre del objeto que recibirá los valores importados". Pero eso es engañoso e incorrecto; En primer lugar, solo hay un valor de importación, que será "recibido" (por qué no decir simplemente "asignado a" o "utilizado para referirse a") name
, y el valor de importación en este caso es la exportación predeterminada del módulo. .
Otra forma de explicar esto es observar que la importación anterior es exactamente idéntica a
import { default as name } from "module-name";
y el ejemplo del OP es precisamente idéntico a
import { default as React, Component, PropTypes } from 'react';
La documentación de MDN pasó a mostrar el ejemplo
import MyModule, {foo, bar} from "my-module.js";
y afirmó que significa
Importe el contenido de un módulo completo, y algunos también se nombrarán explícitamente. Esto inserta myModule
(sic) foo
, y bar
en el alcance actual. Tenga en cuenta que foo
y myModule.foo
son lo mismo, como son bar
ymyModule.bar
Lo que MDN dijo aquí, y lo que afirman otras respuestas basadas en la documentación de MDN incorrecta, es absolutamente incorrecto y puede basarse en una versión anterior de la especificación. Lo que esto realmente hace es
Importe la exportación del módulo predeterminado y algunas exportaciones con nombres explícitos. Esto inserta MyModule
, foo
y bar
en el ámbito actual. No se puede acceder a los nombres de exportación foo
y a través debar
MyModule
, que es la exportación predeterminada , no un paraguas que cubra todas las exportaciones.
(La exportación del módulo predeterminado es el valor exportado con la export default
sintaxis, que también podría ser export {foo as default}
).
Los escritores de documentación de MDN pueden haberse confundido con el siguiente formulario:
import * as MyModule from 'my-module';
Esto importa todas las exportaciones de my-module
y las hace accesibles con nombres como MyModule.name
. La exportación predeterminada también es accesible como MyModule.default
, ya que la exportación predeterminada no es más que otra exportación nombrada con el nombre default
. En esta sintaxis, no hay forma de importar solo un subconjunto de las exportaciones con nombre, aunque se podría importar la exportación predeterminada, si existe, junto con todas las exportaciones con nombre, con
import myModuleDefault, * as myModule from 'my-module';