Slots and Children Patterns
Membuat layout component yang fleksibel dengan children dan area props bernama tanpa mengaburkan struktur UI.
Tujuan belajar
- Membedakan children dengan slot-like props seperti actions dan footer
- Memilih API Panel yang tetap menunjukkan struktur content
- Merefactor markup berulang menjadi layout component yang jelas
Isi lesson
5 blok- 1.Fleksibel tanpa prop boolean berlapisBelum selesaiWajib
- 2.Panel dengan area content, actions, dan footerBelum selesaiWajib
- 3.Cek pemahamanBelum selesaiWajib
- 4.Coding practiceBelum selesaiWajib
- 5.RingkasanBelum selesaiWajib
Fleksibel tanpa prop boolean berlapis
Wajibchildren cocok untuk area utama yang memang diisi caller. Slot-like props seperti actions dan footer cocok untuk area layout bernama yang muncul pada tempat tertentu. Dengan API ini, Panel dapat menyimpan struktur header, body, dan footer tanpa memaksa consumer mengirim banyak boolean seperti showSaveButton atau showHelpLink.
Pilih slot ketika area tersebut punya arti yang stabil bagi pola UI. Jangan membuat prop untuk setiap elemen kecil yang mungkin berubah. Jika consumer perlu kebebasan penuh atas seluruh layout, composition dengan children biasa sering lebih jujur dan lebih sederhana.
Bagian ini memengaruhi progres lesson.
Panel dengan area content, actions, dan footer
Wajibimport type { ReactNode } from "react";
type PanelProps = {
titleId: string;
title: string;
actions?: ReactNode;
children: ReactNode;
footer?: ReactNode;
};
function Panel({ titleId, title, actions, children, footer }: PanelProps) {
return (
<section aria-labelledby={titleId}>
<header>
<h2 id={titleId}>{title}</h2>
{actions ? <div>{actions}</div> : null}
</header>
<div>{children}</div>
{footer ? <footer>{footer}</footer> : null}
</section>
);
}
export function ProfileSettings() {
return (
<Panel
titleId="profile-settings-title"
title="Profile settings"
actions={<button type="button">Simpan draft</button>}
footer={<p>Perubahan belum dikirim ke server.</p>}
>
<p>Atur nama tampilan dan bio kamu di area ini.</p>
</Panel>
);
}Panel menentukan markup yang konsisten untuk heading dan area utama. Consumer menentukan isi body melalui children, lalu hanya mengisi actions atau footer bila area tersebut memang relevan. titleId membuat hubungan heading dan section tetap jelas meskipun beberapa Panel dipakai dalam satu halaman.
Bagian ini memengaruhi progres lesson.
Cek pemahaman
WajibJawab duluCek pemahaman singkat
Kapan prop bernama seperti footer lebih tepat daripada memasukkannya ke children tanpa struktur?
Progres lesson naik setelah jawaban benar.
Coding practice
WajibDibuka di workspace khususCompose profile panel with slots
Refactor markup profile berulang menjadi Panel yang menerima children untuk content utama serta actions dan footer sebagai slot bernama.
Tujuan awal: Fokus di tab TSX.
Practice ini dibuka di workspace khusus. Buka practice untuk memakai editor, preview, dan cek otomatis.
Tombol selesai aktif setelah semua validasi wajib lolos.
Ringkasan
Wajib- children memberi area utama yang fleksibel bagi consumer component.
- Slot-like props cocok untuk area layout bernama seperti actions dan footer.
- API yang baik menampilkan struktur UI tanpa menumpuk boolean prop.
- Berikutnya, kamu akan menerapkan pola yang sama pada form field dengan label, hint, dan error yang konsisten.
Bagian ini memengaruhi progres lesson.
Langkah berikutnya
Selesaikan bagian penting lesson ini
Lanjutkan blok wajib berikutnya: Fleksibel tanpa prop boolean berlapis.