Saya menemukan perpustakaan javascript yang menggunakan sintaks berikut untuk mengimpor perpustakaan:
import React, { Component, PropTypes } from 'react';
Apa perbedaan antara metode di atas dan yang berikut ini?
import React, Component, PropTypes from 'react';
Jawaban:
Ini mengatakan:
Ini menggabungkan dua sintaks umum yang mungkin pernah Anda lihat
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
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
dan contoh OP persis sama dengan
Dokumentasi MDN selanjutnya menunjukkan contohnya
dan mengklaim bahwa itu berarti
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
(Ekspor modul default adalah nilai yang diekspor dengan
export default
sintaks, yang juga bisa jadiexport {foo as default}
.)Penulis dokumentasi MDN mungkin bingung dengan formulir berikut:
Ini mengimpor semua ekspor dari
my-module
, dan membuatnya dapat diakses dengan nama sepertiMyModule.name
. Ekspor default juga dapat diakses sebagaiMyModule.default
, karena ekspor default sebenarnya tidak lebih dari ekspor bernama lain dengan namadefault
. 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, dengansumber
from '/path/to/my-module.js'
, meskipun saya pribadi menggunakanfrom '/path/to/my-module'
.Ini akan mengambil
{ Component, PropTypes }
anggota yang diekspor dari'react'
modul dan menetapkannya keComponent
danPropTypes
, masing-masing.React
akan sama dengandefault
ekspor modul .Sebagaimana dicatat oleh torazaburo di bawah ini, ini sama dengan
yang merupakan singkatan dari
Berikut contoh lain ( tautan ke inti ):
Saya menguji contoh kedua dengan babel:
dan mendapat kesalahan sintaks.
Sebagai referensi, Anda dapat membaca
import
dokumentasi baru dari MDN. Namun, hal itu tampaknya membutuhkan tinjauan teknis. Posting blog Dr. Axel Rauschmayer adalah referensi yang lebih baik untuk saat ini.sumber
React
, dan ekspor bernamaComponent
danPropTypes
ke variabel dengan nama yang sama. Sayangnya, dokumen MDN salah, karena Anda akan mengetahuinya jika mencobanya. Lihat 2ality.com/2014/09/es6-modules-final.html . Selain itu, sintaks impor sama sekali tidak ada hubungannya dengan tugas penghancuran.import
dokumentasi baru`, meninjau riwayat revisi artikel MDN tersebut, bagian yang Anda kutip belum direvisi sejak halaman pertama kali ditulis lebih dari setahun yang lalu, periode di mana sintaks modul berubah dengan cepat.example3.js
mengapa itu mencetakundefined
untukconsole.log(d)
? Sejak Anda melakukannya,export default { a, b, d }
Anda mengekspornya ke dalammyModule.js
.myModule.js
, catatan itua
,b
danc
diekspor secara individual. Ini berarti file lain dapat mengimpornya secara langsung denganimport { a } from 'myModule'
. Di sisi lain,d
hanya tersedia melalui ekspor default, sehingga modul lain dapat mengaksesnya dengan dua cara:import thisObjectContainsDefault from 'myModule'
dan mengaksesnya melaluithisObjectContainsDefault.d
ORimport { default as wrapperObject }
danwrapperObject.d
. Manfaat dari pendekatan kedua adalah Anda juga dapat mengambil item yang diekspor secara individual, seperti yang dapat dilihat diexample3.js
.