Mengimport dan Mengeksport Komponen
Keajaiban komponen terletak pada kemampuannya yang dapat digunakan kembali: Anda dapat membuat komponan yang disusun dengan komponen lain. Namun, ketika Anda menyusun komponen-komponen yang semakin banyak, seringkali lebih masuk akal untuk mulai membaginya ke dalam file-file yang berbeda. Dengan ini Anda menjaga file Anda mudah untuk dipindai dan digunakan kembali di banyak tempat.
You will learn
- Apa itu file komponen root
- Bagaimana cara import dan eksport komponen
- Kapan menggunakan default dan named import dan eksport
- Bagaimana cara mengimport dan mengeksport beberapa komponen pada satu file
- Bagaimana cara memisahkan komponen menjadi beberapa file
File komponen root
Pada Komponen Pertama Anda, Anda membuat komponen Profile dan komponen Gallery yang merender:
function Profile() { return ( <img src="https://i.imgur.com/MK3eW3As.jpg" alt="Katherine Johnson" /> ); } export default function Gallery() { return ( <section> <h1>Ilmuan Hebat</h1> <Profile /> <Profile /> <Profile /> </section> ); }
Komponen tersebut saat ini berada pada file komponen root, yang bernama App.js pada contoh ini. Pada Create React App, aplikasi Anda berada di src/App.js. Tergantung pada persiapan Anda, komponen root Anda bisa saja berada di file lain. Jika Anda menggunakan framework dengan file-based routing, seperti Next.js, komponen root Anda akan berbeda di setiap halaman.
Mengeksport dan mengimport sebuah komponen
Bagaimana jika Anda ingin mengubah landing screen di masa depan dan memasukkan daftar buku sains disana? Atau meletakkan semua profil di tempat lain? Masuk akal untuk memindahkan Gallery dan Profile dari file komponen root. Ini akan membuat lebih modular dan dapat digunakan kembali di file lain. Anda dapat memindahkan sebuah komponen dengan tiga langkah:
- Buat sebuah file JS baru untuk memasukkan komponen.
- Eksport function component Anda dari file tersebut (menggunakan baik default atau named exports).
- Import dimana Anda akan menggunakan komponen tersebut (menggunakan teknik yang sesuai untuk mengimport default atau named exports).
Di sini Profile dan Gallery sudah dipindahkan dari App.js ke dalam file baru bernama Gallery.js. Sekarang Anda dapat mengubah App.js untuk mengimport Gallery dari Gallery.js:
import Gallery from './Gallery.js'; export default function App() { return ( <Gallery /> ); }
Perhatikan bagaimana pada contoh ini dipecah menjadi dua file komponen sekarang:
Gallery.js:- Mendefinisikan
Profilekomponen yang hanya digunakan dalam file yang sama dan tidak dieksport. - Mengeksport
Gallerykomponen sebagai default export.
- Mendefinisikan
App.js:- Mengimport
Gallerysebagai default import dariGallery.js. - Mengeksport root
Appkomponen sebagai default export.
- Mengimport
Deep Dive
Ada dua cara utama untuk mengeksport nilai dengan JavaScript: default exports dan named exports. Sejauh ini, contoh kita hanya menggunakan default exports. Tapi Anda dapat menggunakan satu atau keduanya pada file yang sama. Sebuah file dapat menggunakan tidak lebih dari satu default export, tapi dapat menggunakan named exports sebanyak yang Anda suka.
Bagaimana Anda mengeksport komponen Anda mendikte bagaimana Anda harus mengimportnya. Anda akan mendapatkan error jika Anda mencoba untuk mengimport default export dengan cara yang sama Anda menggunakan named export! Tabel ini akan membantu Anda untuk melacak:
| Sintaksis | Pernyataan Export | Pernyataan Import |
|---|---|---|
| Default | export default function Button() {} | import Button from './Button.js'; |
| Named | export function Button() {} | import { Button } from './Button.js'; |
Ketika Anda menulis default import, Anda dapat memberi nama apa saja setelah import. Contoh, Anda dapat menulis import Banana from './Button.js' dan itu akan tetap memberi Anda export default yang sama. Sebaliknya, dengan named imports, nama harus sama di kedua sisi. Itulah mengapa disebut named imports!
Orang-orang seringkali menggunakan default exports jika file yang dieksport hanya satu komponen, dan menggunakan named exports jika mengeksport beberapa komponen dan nilai. Bagaimanapun gaya koding yang Anda gunakan, selalu beri nama yang berarti pada fungsi komponen Anda dan isi file tersebut. Komponen tanpa nama, seperti export default () => {}, tidak disarankan karena membuat proses debugging lebih sulit.
Mengeksport dan mengimport beberapa komponen dari file yang sama
Bagaimana jika Anda ingin menampilkan hanya satu Profile selain sebuah galeri? Anda dapat mengeksport komponen Profile juga. Tapi Gallery.js telah menggunakan default export, dan Anda tidak dapat memiliki dua default exports. Anda dapat membuat file baru dengan default export, atau Anda dapat menambahkan sebuah named export untuk Profile. Sebuah file hanya dapat memiliki satu default export, tapi dapat memiliki banyak named export!
Pertama, eksport Profile dari Gallery.js menggunakan named export (tanpa kata kunci default):
export function Profile() {
// ...
}Selanjutnya, import Profile dari Gallery.js ke App.js menggunakan named import (dengan kurung kurawal):
import { Profile } from './Gallery.js';Akirnya, render <Profile /> dari komponen App:
export default function App() {
return <Profile />;
}Sekarang Gallery.js berisi dua eksport: default Gallery export, dan named Profile export. App.js mengimport keduanya.
Coba mengedit <Profile /> ke <Gallery /> dan kembali pada contoh ini:
import Gallery from './Gallery.js'; import { Profile } from './Gallery.js'; export default function App() { return ( <Profile /> ); }
Sekarang Anda menggunakan campuran default dan named exports:
Gallery.js:- Mengeksport komponen
Profilesebagai named export bernamaProfile. - Mengeksport komponen
Gallerysebagai default export.
- Mengeksport komponen
App.js:- Mengimport
Profileas a named import calledProfiledariGallery.js. - Mengimport
Galleryas a default import dariGallery.js. - Mengeksport komponen root
Appsebagai default export.
- Mengimport
Recap
Pada halaman ini Anda belajar:
- Apa itu file komponen root
- Bagaimana cara import dan eksport komponen
- Kapan menggunakan default dan named import dan eksport
- Bagaimana cara mengimport dan mengeksport beberapa komponen pada satu file
Challenge 1 of 1: Memisahkan komponen lebih jauh
Saat ini, Gallery.js mengeksport kedua Profile dan Gallery, yang mana sedikit membingungkan.
Pindahkan komponen Profile pada miliknya sendiri Profile.js, dan ubah komponen App untuk merender kedua <Profile /> dan <Gallery /> satu setelah lainnya.
Anda mungkin menggukanan salah satu dari default atau named export untuk Profile, tetapi pastikan bahwa Anda menggunakan sintaksis import pada kedua App.js dan Gallery.js. Anda dapat merujuk pada table dari bagian deep dive di atas:
| Sintaksis | Pernyataan Export | Pernyataan Import |
|---|---|---|
| Default | export default function Button() {} | import Button from './Button.js'; |
| Named | export function Button() {} | import { Button } from './Button.js'; |
// Pindahkan aku ke Profile.js! export function Profile() { return ( <img src="https://i.imgur.com/QIrZWGIs.jpg" alt="Alan L. Hart" /> ); } export default function Gallery() { return ( <section> <h1>Ilmuan Hebat</h1> <Profile /> <Profile /> <Profile /> </section> ); }
Setelah Anda berhasil menjalankan dengan salah satu eksport, buat juga berjalan dengan jenis yang lain.