Saya mencoba menentukan apakah ada perbedaan besar antara keduanya, selain dapat mengimpor dengan export default
hanya melakukan:
import myItem from 'myItem';
Dan menggunakan export const
saya bisa lakukan:
import { myItem } from 'myItem';
Saya bertanya-tanya apakah ada perbedaan dan / atau kasus penggunaan selain ini.
javascript
ecmascript-6
es6-modules
ajmajmajma
sumber
sumber
const
akan membuat pengenal hanya baca. Jadi, dalam hal nilai-nilai primitif, Anda dapat menganggap itu tidak berubah. Perhatikan bahwa nilai itu sendiri tidak dapat diubah, sehingga objek, array, dll dapat diubah - hanya saja tidak ditugaskan kembali.const
.Jawaban:
Ini adalah ekspor bernama vs ekspor default.
export const
adalah ekspor bernama yang mengekspor deklarasi atau deklarasi const.Untuk menekankan: yang penting di sini adalah
export
kata kunci seperticonst
yang digunakan untuk mendeklarasikan deklarasi konstitusi atau deklarasi.export
dapat juga diterapkan pada deklarasi lain seperti deklarasi kelas atau fungsi.Ekspor Default (
export default
)Anda dapat memiliki satu ekspor standar per file. Ketika Anda mengimpor, Anda harus menentukan nama dan mengimpor seperti:
Anda dapat memberikan nama apa saja yang Anda suka.
Ekspor Bernama (
export
)Dengan ekspor bernama, Anda dapat memiliki beberapa ekspor bernama per file. Kemudian impor ekspor spesifik yang Anda inginkan ada dalam kurung:
Atau dimungkinkan untuk menggunakan default bersama impor yang disebutkan dalam pernyataan yang sama:
Impor Namespace
Anda juga dapat mengimpor semuanya dari file di objek:
Catatan
Ekspor default sebenarnya adalah ekspor bernama dengan nama
default
sehingga Anda dapat mengimpornya dengan impor bernama:sumber
export default
mempengaruhi sintaksis ketika mengimpor "barang" yang diekspor, ketika mengizinkan untuk mengimpor, apa pun yang telah diekspor, dengan memilih namaimport
itu sendiri, tidak peduli apa nama saat diekspor, hanya karena itu ditandai sebagai "default".Case use berguna, yang saya suka (dan gunakan), memungkinkan untuk mengekspor fungsi anonim tanpa secara eksplisit harus menamainya, dan hanya ketika fungsi itu diimpor, itu harus diberi nama:
Contoh:
Ekspor 2 fungsi, satu adalah
default
:Impor fungsi-fungsi di atas. Membuat nama untuk yang
default
satu:Ketika
{}
sintaks digunakan untuk mengimpor fungsi (atau variabel) itu berarti bahwa apa pun yang diimpor sudah bernama saat diekspor, jadi orang harus mengimpornya dengan nama yang sama persis , atau jika impor tidak akan berfungsi.Contoh yang Salah:
Fungsi default harus menjadi yang pertama diimpor
divide_1
tidak diekspormodule_1.js
, jadi tidak ada yang akan diimporsquare
tidak diekspormodule_1.js
, karena{}
memberitahu mesin untuk secara eksplisit mencari ekspor bernama saja.sumber
import something from
alih-alihimport { somethingNamed } from
.Catatan kecil: Harap perhatikan bahwa ketika Anda mengimpor dari ekspor default, penamaannya benar-benar independen. Ini sebenarnya berdampak pada refactoring.
Katakanlah Anda memiliki kelas
Foo
seperti ini dengan impor yang sesuai:Sekarang jika Anda mengubah
Foo
kelas menjadiBar
dan juga mengganti nama file, sebagian besar IDE TIDAK akan menyentuh impor Anda. Jadi, Anda akan berakhir dengan ini:Khususnya dalam naskah, saya sangat menghargai ekspor bernama dan refactoring yang lebih andal. Perbedaannya hanyalah kurangnya
default
kata kunci dan kurung kurawal. Btw ini juga mencegah Anda membuat kesalahan ketik pada impor Anda karena Anda telah mengetikkan pemeriksaan sekarang.sumber
import { Foo as Anything } from …
seperti yang dapat Anda lakukanimport Anything from …
dengan ekspor default.as
benar-benar bukan poin di komentar sumber itu. Terima kasih untuk downvote; pexport default
untuk mengekspor objek utama proyek, khususnya dari paket npm (ini menggantikan amodule.exports =
). Tetapi, secara internal dalam suatu proyek, lebih baik menggunakan ekspor yang disebutkan saja.Dari dokumentasi :
sumber
Ketika Anda meletakkan default, itu disebut ekspor standar. Anda hanya dapat memiliki satu ekspor default per file dan Anda dapat mengimpornya dalam file lain dengan nama apa pun yang Anda inginkan. Ketika Anda tidak menempatkan default, namanya bernama ekspor, Anda harus mengimpornya di file lain menggunakan nama yang sama dengan kurung kurawal di dalamnya.
sumber
Saya punya masalah bahwa browser tidak menggunakan es6.
Saya telah memperbaikinya dengan:
Modul type memberi tahu browser untuk menggunakan ES6.
Maka itu harus bekerja.
sumber