import React, { Component, PropTypes } from 'react';
Це говорить:
Імпортуйте експорт за замовчуванням з- 'react'під імені Reactта імпортуйте названий експорт Componentта PropTypesпід тими ж назвами.
Це поєднує в собі два поширених синтаксису, які ви, напевно, бачили
import React from 'react';
import { Component, PropTypes } from 'react';
Перший використовується для імпорту та назви експорту за замовчуванням, другий для імпорту вказаного експорту.
За загальним правилом, більшість модулів надаватимуть єдиний експорт за замовчуванням або список названих експортерів. Дещо менш звичним для модуля є надання як експорту за замовчуванням, так і названого експорту. Однак у випадку, коли є одна особливість, яка найчастіше імпортується, а також додаткові підфункції, це дійсна конструкція для експорту першої як за замовчуванням, а решти як названої експорту. Саме в таких випадках ви використовуєте importсинтаксис, на який ви посилаєтесь.
Інші відповіді десь між помилковими та заплутаними, можливо, тому, що документи MDN під час запитання цього питання були помилковими та заплутаними. MDN показав приклад
import name from "module-name";
і nameце "ім'я об'єкта, який отримає імпортовані значення". Але це вводить в оману і неправильно; Перш за все, існує лише одне значення імпорту, яке буде "отримано" (чому б не сказати просто "призначено" або "використовується для посилання") name, а значення імпорту в цьому випадку - експорт за замовчуванням з модуля .
Ще один спосіб пояснення цього - зазначити, що вищевказаний імпорт точно ідентичний
import { default as name } from "module-name";
і приклад ОП точно ідентичний
import { default as React, Component, PropTypes } from 'react';
Документація MDN продовжувала показувати приклад
import MyModule, {foo, bar} from "my-module.js";
і стверджував, що це означає
Імпортуйте вміст цілого модуля, а деякі також мають чітке ім'я. Це вставляє myModule(sic) foo, і barв поточну область. Зауважте, що fooі myModule.fooтакі самі, як barіmyModule.bar
Що тут говорив MDN та які відповіді на інші відповіді, виходячи з неправильної документації MDN, абсолютно невірно і може базуватися на більш ранній версії специфікації. Насправді це і є
Імпортуйте експорт модуля за замовчуванням та деякий експліцитно названий експорт. Це вставляє MyModule, fooі barв поточну область. Імена експорту fooі barє НЕ доступні черезMyModule , який є по замовчуванням експорту, а не якийсь - то парасолька охоплює весь експорт.
(Експорт модуля за замовчуванням - це значення, експортоване із export defaultсинтаксисом, яке також може бути export {foo as default}.)
Автори документації MDN, можливо, заплуталися у такій формі:
import * as MyModule from 'my-module';
Це імпортує весь експорт з my-moduleта робить їх доступними під такими назвами, як MyModule.name. Експорт за замовчуванням також доступний як MyModule.default, оскільки експорт за замовчуванням насправді є не що інше, як інший імпорт з ім'ям default. У цьому синтаксисі немає способу імпортувати лише підмножину названого експорту, хоча можна імпортувати експорт за замовчуванням, якщо він є, разом із усім названим експортом, з
import myModuleDefault, * as myModule from 'my-module';