FluentStack

Slots and Children Patterns

Mode tersedia: dark, light, paper
MasukDaftar
Advanced · Level 9: React AdvancedAdvanced60 menitBahasa Indonesia

Slots and Children Patterns

Membuat layout component yang fleksibel dengan children dan area props bernama tanpa mengaburkan struktur UI.

StatusMemuat progres
ProgresMemuat...

...

Memuat progres

Menyiapkan langkah berikutnya

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
ReactCompositionChildrenComponent API

Isi lesson

5 blok
  1. 1.
    Fleksibel tanpa prop boolean berlapisBelum selesaiWajib
  2. 2.
    Panel dengan area content, actions, dan footerBelum selesaiWajib
  3. 3.
    Cek pemahamanBelum selesaiWajib
  4. 4.
    Coding practiceBelum selesaiWajib
  5. 5.
    RingkasanBelum selesaiWajib

Fleksibel tanpa prop boolean berlapis

Wajib

children 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

Wajib
tsx
import 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 dulu

Cek 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 khusus

Compose 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.

9 cek otomatis5 checklist
Belum selesaiBuka practice

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.