import React, { Component, PropTypes } from 'react';
Questo dice:
Importa l' esportazione predefinita da 'react'
sotto il nome React
e importa le esportazioni denominateComponent
e PropTypes
con gli stessi nomi.
Questo combina le due sintassi comuni che probabilmente hai visto
import React from 'react';
import { Component, PropTypes } from 'react';
Il primo utilizzato per importare e denominare l'esportazione predefinita, il secondo per importare le esportazioni denominate specificate.
Come regola generale, la maggior parte dei moduli fornirà una singola esportazione predefinita o un elenco di esportazioni con nome. E 'un po' meno del solito per un modulo per fornire sia un export di default e le esportazioni di nome. Tuttavia, nel caso in cui vi sia una funzionalità che viene importata più comunemente, ma anche funzionalità secondarie aggiuntive, è un progetto valido esportare la prima come predefinita e le rimanenti come esportazioni con nome. È in questi casi che useresti la import
sintassi a cui ti riferisci.
Le altre risposte sono da qualche parte tra sbagliato e confuso, probabilmente perché i documenti MDN al momento in cui è stata posta questa domanda erano sbagliati e confusi. MDN ha mostrato l'esempio
import name from "module-name";
e ha detto name
è il "nome dell'oggetto che riceverà i valori importati". Ma questo è fuorviante e sbagliato; prima di tutto, c'è un solo valore di importazione, che sarà "ricevuto" (perché non dire semplicemente "assegnato a" o "usato per fare riferimento a") name
, e il valore di importazione in questo caso è l' esportazione predefinita dal modulo .
Un altro modo per spiegare questo è notare che l'importazione di cui sopra è esattamente identica a
import { default as name } from "module-name";
e l'esempio dell'OP è esattamente identico a
import { default as React, Component, PropTypes } from 'react';
La documentazione MDN ha continuato a mostrare l'esempio
import MyModule, {foo, bar} from "my-module.js";
e ha affermato che significa
Importa il contenuto di un intero modulo, con alcuni anche esplicitamente nominati. Questo inserisce myModule
(sic) foo
, e bar
nel campo di applicazione corrente. Nota che foo
e myModule.foo
sono la stessa cosa, come lo sono bar
emyModule.bar
Ciò che MDN ha detto qui, e quali altre risposte affermano in base alla documentazione MDN errata, è assolutamente sbagliato e potrebbe essere basato su una versione precedente della specifica. Ciò che in realtà fa è
Importa l'esportazione del modulo predefinito e alcune esportazioni dal nome esplicito. Questo inserisce MyModule
, foo
e bar
nell'ambito corrente. I nomi di esportazione foo
e nonbar
sono accessibili tramiteMyModule
, che è l' esportazione predefinita , non un ombrello che copre tutte le esportazioni.
(L'esportazione del modulo predefinito è il valore esportato con la export default
sintassi, che potrebbe anche essere export {foo as default}
.)
Gli autori della documentazione MDN potrebbero essersi confusi con il seguente modulo:
import * as MyModule from 'my-module';
Ciò importa tutte le esportazioni da my-module
e le rende accessibili con nomi come MyModule.name
. L'esportazione predefinita è accessibile anche come MyModule.default
, poiché l'esportazione predefinita non è altro che un'altra esportazione denominata con il nome default
. In questa sintassi, non è possibile importare solo un sottoinsieme delle esportazioni denominate, sebbene si possa importare l'esportazione predefinita, se presente, insieme a tutte le esportazioni denominate, con
import myModuleDefault, * as myModule from 'my-module';