import React, { Component, PropTypes } from 'react';
Dies sagt:
Importieren Sie den Standard - Export aus 'react'
unter dem Namen React
und importieren Sie die Namen Exporte Component
und PropTypes
unter den gleichen Namen.
Dies kombiniert die beiden gängigen Syntaxen, die Sie wahrscheinlich gesehen haben
import React from 'react';
import { Component, PropTypes } from 'react';
Der erste dient zum Importieren und Benennen des Standardexports, der zweite zum Importieren der angegebenen benannten Exporte.
In der Regel stellen die meisten Module entweder einen einzelnen Standardexport oder eine Liste benannter Exporte bereit. Es ist etwas weniger üblich, dass ein Modul sowohl einen Standardexport als auch benannte Exporte bereitstellt . Wenn jedoch ein Feature am häufigsten importiert wird, aber auch zusätzliche Unter-Features, ist es ein gültiges Design, das erste als Standard und die übrigen als benannte Exporte zu exportieren. In solchen Fällen würden Sie die import
Syntax verwenden, auf die Sie sich beziehen.
Die anderen Antworten liegen irgendwo zwischen falsch und verwirrend, möglicherweise weil die MDN-Dokumente zum Zeitpunkt der Beantwortung dieser Frage falsch und verwirrend waren. MDN zeigte das Beispiel
import name from "module-name";
und gesagt name
ist der "Name des Objekts, das die importierten Werte erhält". Aber das ist irreführend und falsch; Erstens gibt es nur einen Importwert, der "empfangen" wird (warum nicht einfach "zugewiesen zu" oder "verwendet, um darauf zu verweisen" sagen) name
, und der Importwert ist in diesem Fall der Standardexport aus dem Modul .
Eine andere Möglichkeit, dies zu erklären, besteht darin, zu beachten, dass der obige Import genau identisch mit ist
import { default as name } from "module-name";
und das Beispiel des OP ist genau identisch mit
import { default as React, Component, PropTypes } from 'react';
Die MDN-Dokumentation zeigte das Beispiel
import MyModule, {foo, bar} from "my-module.js";
und behauptete, dass es bedeutet
Importieren Sie den gesamten Inhalt eines Moduls, wobei einige auch explizit benannt werden. Dies fügt myModule
(sic) foo
und bar
in den aktuellen Bereich ein. Beachten Sie, dass foo
und myModule.foo
die gleichen sind wie bar
undmyModule.bar
Was MDN hier gesagt hat und welche anderen Antworten aufgrund der falschen MDN-Dokumentation behaupten, ist absolut falsch und basiert möglicherweise auf einer früheren Version der Spezifikation. Was dies tatsächlich tut, ist
Importieren Sie den Standardmodulexport und einige explizit benannte Exporte. Diese Einsätze MyModule
, foo
und bar
in den aktuellen Bereich. Die Exportnamen foo
und bar
sind nicht zugänglich überMyModule
, was der Standardexport ist , nicht irgendein Dach, das alle Exporte abdeckt.
(Der Standardmodulexport ist der mit der export default
Syntax exportierte Wert , der auch sein kann export {foo as default}
.)
Die Verfasser der MDN-Dokumentation sind möglicherweise mit dem folgenden Formular verwechselt worden:
import * as MyModule from 'my-module';
Dies importiert alle Exporte von my-module
und macht sie unter Namen wie zugänglich MyModule.name
. Auf den Standardexport kann auch zugegriffen werden MyModule.default
, da der Standardexport eigentlich nichts anderes als ein anderer benannter Export mit dem Namen ist default
. In dieser Syntax gibt es keine Möglichkeit, nur eine Teilmenge der benannten Exporte zu importieren, obwohl man den Standardexport importieren könnte, wenn es einen zusammen mit allen benannten Exporten mit gibt
import myModuleDefault, * as myModule from 'my-module';