import React, { Component, PropTypes } from 'react';
Ini mengatakan:
Impor ekspor default dari 'react'
bawah nama React
dan impor ekspor bernamaComponent
dan PropTypes
dengan nama yang sama.
Ini menggabungkan dua sintaks umum yang mungkin pernah Anda lihat
import React from 'react';
import { Component, PropTypes } from 'react';
Yang pertama digunakan untuk mengimpor dan memberi nama ekspor default, yang kedua untuk mengimpor ekspor bernama yang ditentukan.
Sebagai aturan umum, sebagian besar modul akan menyediakan ekspor default tunggal, atau daftar ekspor bernama. Ini agak kurang biasa bagi modul untuk menyediakan ekspor default dan ekspor bernama. Namun, dalam kasus di mana ada satu fitur yang paling sering diimpor, tetapi juga sub-fitur tambahan, itu adalah desain yang valid untuk mengekspor yang pertama sebagai default, dan yang tersisa sebagai ekspor bernama. Dalam kasus seperti itu, Anda akan menggunakan import
sintaks yang Anda rujuk.
Jawaban lainnya mungkin salah dan membingungkan, mungkin karena dokumen MDN pada saat pertanyaan ini diajukan salah dan membingungkan. MDN menunjukkan contohnya
import name from "module-name";
dan kata name
adalah "nama objek yang akan menerima nilai yang diimpor." Tapi itu menyesatkan dan tidak benar; pertama-tama, hanya ada satu nilai impor, yang akan "diterima" (mengapa tidak hanya mengatakan "ditugaskan ke", atau "digunakan untuk merujuk ke") name
, dan nilai impor dalam hal ini adalah ekspor default dari modul .
Cara lain untuk menjelaskan hal ini adalah dengan memperhatikan bahwa impor di atas persis sama dengan
import { default as name } from "module-name";
dan contoh OP persis sama dengan
import { default as React, Component, PropTypes } from 'react';
Dokumentasi MDN selanjutnya menunjukkan contohnya
import MyModule, {foo, bar} from "my-module.js";
dan mengklaim bahwa itu berarti
Impor seluruh konten modul, dengan beberapa juga diberi nama secara eksplisit. Ini menyisipkan myModule
(sic) foo
,, dan bar
ke dalam cakupan saat ini. Perhatikan bahwa foo
dan myModule.foo
adalah sama, as are bar
danmyModule.bar
Apa yang dikatakan MDN di sini, dan jawaban lain apa yang diklaim berdasarkan dokumentasi MDN yang salah, benar-benar salah, dan mungkin didasarkan pada versi spesifikasi sebelumnya. Apa yang sebenarnya dilakukannya adalah
Impor ekspor modul default dan beberapa ekspor dengan nama yang jelas. Ini menyisipkan MyModule
,, foo
dan bar
ke dalam cakupan saat ini. Nama-nama ekspor foo
dan bar
yang tidak dapat diakses melaluiMyModule
, yang merupakan standar ekspor, tidak beberapa payung yang mencakup semua ekspor.
(Ekspor modul default adalah nilai yang diekspor dengan export default
sintaks, yang juga bisa jadi export {foo as default}
.)
Penulis dokumentasi MDN mungkin bingung dengan formulir berikut:
import * as MyModule from 'my-module';
Ini mengimpor semua ekspor dari my-module
, dan membuatnya dapat diakses dengan nama seperti MyModule.name
. Ekspor default juga dapat diakses sebagai MyModule.default
, karena ekspor default sebenarnya tidak lebih dari ekspor bernama lain dengan nama default
. Dalam sintaks ini, tidak ada cara untuk mengimpor hanya subset dari ekspor bernama, meskipun seseorang dapat mengimpor ekspor default, jika ada, bersama dengan semua ekspor bernama, dengan
import myModuleDefault, * as myModule from 'my-module';