Tampaknya sudah jelas, tapi saya agak bingung tentang kapan harus menggunakan kurung kurawal untuk mengimpor satu modul di ES6. Misalnya, dalam proyek React-Native yang saya kerjakan, saya memiliki file berikut dan isinya:
initialState.jsvar initialState = {
todo: {
todos: [
{id: 1, task: 'Finish Coding', completed: false},
{id: 2, task: 'Do Laundry', completed: false},
{id: 2, task: 'Shopping Groceries', completed: false},
]
}
};
export default initialState;
Di TodoReducer.js, saya harus mengimpornya tanpa kurung kurawal:
import initialState from './todoInitialState';
Jika saya melampirkan initialState
kurung kurawal, saya mendapatkan kesalahan berikut untuk baris kode berikut:
TodoReducer.js:Tidak dapat membaca todo properti dari undefined
export default function todos(state = initialState.todo, action) {
// ...
}
Kesalahan serupa juga terjadi pada komponen saya dengan kurung kurawal. Saya bertanya-tanya kapan saya harus menggunakan kurung kurawal untuk impor tunggal, karena jelas, ketika mengimpor beberapa komponen / modul, Anda harus melampirkannya dalam kurung kurawal, yang saya tahu.
Edit:
Posting SO di sini tidak menjawab pertanyaan saya, sebaliknya saya bertanya kapan saya harus atau tidak harus menggunakan kurung kurawal untuk mengimpor satu modul, atau saya tidak boleh menggunakan kurung kurawal untuk mengimpor satu modul di ES6 (ini rupanya bukan case, karena saya telah melihat impor tunggal dengan kawat gigi keriting diperlukan)
sumber
Jawaban:
Ini adalah impor default :
Ini hanya berfungsi jika
A
memiliki ekspor default :Dalam hal ini, apa pun nama yang Anda tetapkan saat mengimpor:
Karena akan selalu menyelesaikan apa pun adalah ekspor bawaan dari
A
.Ini adalah impor bernama bernama
A
:Ini hanya berfungsi jika
A
berisi ekspor bernama bernamaA
:Dalam hal ini nama penting karena Anda mengimpor hal tertentu dengan nama ekspornya :
Untuk membuatnya bekerja, Anda akan menambahkan ekspor bernama yang sesuai ke
A
:Modul hanya dapat memiliki satu ekspor standar , tetapi sebanyak yang disebut ekspor yang Anda inginkan (nol, satu, dua, atau banyak). Anda dapat mengimpor semuanya bersama-sama:
Di sini, kami mengimpor ekspor default sebagai
A
, dan masing-masing bernama ekspor yang disebutmyA
danSomething
.Kami juga dapat menetapkan mereka semua nama yang berbeda saat mengimpor:
Ekspor standar cenderung digunakan untuk apa pun yang biasanya Anda harapkan dari modul. Ekspor yang disebutkan cenderung digunakan untuk utilitas yang mungkin berguna, tetapi tidak selalu diperlukan. Namun terserah Anda untuk memilih cara mengekspor barang: misalnya, modul mungkin tidak memiliki ekspor default sama sekali.
Ini adalah panduan yang bagus untuk modul ES, menjelaskan perbedaan antara ekspor standar dan bernama.
sumber
export const myA = 43; export const Something = 44;
dan jugaexport default { myA, Something }
? Jadi ketika Anda mengimpor, Anda dapat melakukanimport A from './A';
semuanya di dalam modul, atauimport { Something } from './A';
Anda hanya akan mendapatkan sebagian dari modulimport * as AllTheThings
.import 'firebase/storage';
atauimport 'rxjs/add/operator/map';
. Apa yang sebenarnya dilakukan?Saya akan mengatakan ada juga notasi berbintang untuk
import
kata kunci ES6 yang layak disebutkan.Jika Anda mencoba konsol Mix log:
Kamu akan mendapatkan:
Tanda kurung berwarna emas ketika Anda hanya membutuhkan komponen tertentu dari modul, yang membuat jejak kaki yang lebih kecil untuk bundler seperti paket web.
sumber
import * as Mix from "./A";
danimport A as Mix from "./A";
sama?Dan Abramov menjawab di atas menjelaskan tentang ekspor default dan ekspor bernama .
Yang mana untuk digunakan?
Mengutip David Herman : ECMAScript 6 mendukung gaya ekspor tunggal / standar, dan memberikan sintaksis paling manis untuk mengimpor default. Impor yang disebut ekspor dapat dan bahkan harus sedikit kurang ringkas.
Namun dalam TypeScript bernama ekspor disukai karena refactoring. Contoh, jika Anda mengekspor kelas secara default dan menamainya, nama kelas hanya akan berubah di file itu dan tidak di referensi lain, dengan nama kelas ekspor bernama akan diganti namanya di semua referensi. Ekspor yang dinamai juga lebih disukai untuk utilitas.
Keseluruhan gunakan apapun yang Anda inginkan.
Tambahan
Ekspor default sebenarnya adalah ekspor bernama dengan nama default, jadi ekspor default dapat diimpor sebagai:
sumber
Additional
line adalah informasi yang baik.import A from './A'
tidak masuk akal jika Anda mengekspor tanpa mendefinisikan nama sepertiexport default 42
.Jika Anda berpikir
import
hanya sebagai sintaksis gula untuk modul node, objek, dan perusakan, saya menemukan itu cukup intuitif.sumber
Untuk memahami penggunaan kurung kurawal dalam
import
pernyataan, pertama, Anda harus memahami konsep destruksi yang diperkenalkan dalam ES6Destrukturisasi objek
Perusakan susunan
Menggunakan daftar yang cocok
Menggunakan operator spread
Sekarang kita sudah berhasil, masuk ES6 Anda dapat mengekspor beberapa modul. Anda kemudian dapat menggunakan objek perusakan seperti di bawah ini
Mari kita asumsikan Anda memiliki modul yang disebut
module.js
Anda ingin mengimpor fungsi yang diekspor ke
index.js
;Anda juga dapat menggunakan nama variabel yang berbeda seperti itu
sumber
import {printFirstname as pFname, printLastname as pLname} from './module.js'
sama dengan:var foo = {printFirstname: 'p_f_n', printLastname: 'p_l_n'}; var { printFirstname:pFname, printLastname: pLname } = foo; pFname('Taylor'); pLname('Swift');
ES6
Modul ringkasan :ekspor:
Anda memiliki 2 jenis ekspor:
Sintaksis:
Impor:
The jenis ekspor (yaitu bernama atau ekspor default) mempengaruhi bagaimana impor sesuatu:
Sintaksis:
Hal-hal menarik:
Alias:
Setiap kali Anda ingin mengganti nama impor bernama ini dimungkinkan melalui alias . Sintaks untuk ini adalah sebagai berikut:
Sekarang kami telah mengimpor
importantData_1
tetapi pengenalnyamyData
bukanimportantData_1
.sumber
biasanya ketika Anda mengekspor fungsi Anda perlu menggunakan {}
Kau gunakan
import {x} from ''
Anda perlu menggunakan
import X from ''
sini Anda dapat mengubah X ke variabel apa pun yang Anda inginkansumber
Kurung kurawal ({}) digunakan untuk mengimpor bindings bernama dan konsep di balik itu adalah penugasan merusak
Demonstrasi sederhana tentang cara kerja pernyataan impor dengan contoh dapat ditemukan dalam jawaban saya sendiri untuk pertanyaan serupa di Kapan kita menggunakan '{}' dalam impor javascript?
sumber
Kurung kurawal hanya digunakan untuk impor saat ekspor disebutkan. Jika ekspor default maka kurung kurawal tidak digunakan untuk impor.
sumber
Untuk ekspor default, kami tidak menggunakan {} ketika kami mengimpor.
misalnya
player.js
index.js
index.js
player.js
Jika kami ingin mengimpor semua yang kami ekspor maka kami menggunakan *
sumber