Lewati ke konten utama
menjadi.dev
Chapter 16.8 Frontend Menengah

React Patterns: Compound Components

Pattern untuk komponen yang saling terkait

Tujuan Pembelajaran

  • Memahami compound components pattern
  • Bisa mengimplementasikan compound components

Analogi

Diagram

      Compound Components = Set Peralatan Dapur
Tiap alat punya fungsi sendiri tapi bekerja sama untuk masak
    

Compound components adalah pattern di mana beberapa component bekerja bersama untuk membentuk satu kesatuan

Penjelasan Konsep

Compound Components

Compound Components adalah pattern di mana beberapa component bekerja bersama secara implisit melalui shared state, tanpa perlu props drilling. Contoh klasik: <Select> dengan <Option>, <Tabs> dengan <Tab> dan <TabPanel>.

Implementasi dengan React Context

  1. Buat context untuk share state antara parent dan children.
  2. Parent component (Container) menjadi Provider.
  3. Child components (Sub-components) consume context.

Keuntungan

  • API yang intuitif dan declarative.
  • Tidak perlu props drilling.
  • Fleksibel — urutan dan nesting bebas.
  • Encapsulated state management.

Contoh

<Tabs> mengatur active tab state. <Tab> dan <TabPanel> mengonsumsi context untuk tahu mana yang active.

Inti yang Perlu Dipahami

Bagian ini berfokus pada memahami compound components pattern., dan bisa mengimplementasikan compound components. Jangan terburu-buru menghafal istilahnya. Lebih penting untuk memahami peran setiap konsep dan kapan konsep itu muncul dalam pekerjaan web development.

Saat membaca React Patterns, gunakan tujuan belajar sebagai penanda arah. Kalau kamu sudah bisa menjelaskan tujuan itu dengan kata-katamu sendiri, berarti fondasinya mulai terbentuk.

Cara Membayangkannya

Compound components adalah pattern di mana beberapa component bekerja bersama untuk membentuk satu kesatuan. Analogi ini dipakai supaya konsep teknis tidak terasa melayang. Hubungkan setiap istilah dengan perannya: siapa yang meminta, siapa yang memproses, data apa yang berpindah, dan hasil apa yang diharapkan.

Kalau analoginya sudah terasa masuk akal, barulah lihat istilah teknisnya. Cara ini membuat materi lebih mudah dipahami daripada langsung menghafal definisi.

Saat Melihat Contoh Kode

Contoh kode pada chapter ini memakai bahasa tsx. Bacalah contoh kode sebagai ilustrasi alur, bukan sebagai bagian yang harus langsung dihafal. Compound components share state via Context. API intuitive dan declarative.

Perhatikan nama fungsi, urutan langkah, dan data yang berpindah. Biasanya tiga hal itu sudah cukup untuk memahami hubungan antara teori dan praktik.

Konteks dalam Perjalanan Belajar

Setiap konsep di platform ini dipilih karena dipakai di industri. Fokus pada pemahaman, bukan hafalan.

Kamu sudah di bagian lanjutan. Mulai pikirkan bagaimana konsep ini dipakai di dunia kerja — bukan hanya untuk belajar, tapi untuk membangun produk nyata.

Gunakan pertanyaan reflektif dan prompt AI di akhir chapter sebagai latihan aktif. Membaca saja tidak cukup — kamu perlu menjelaskan ulang dengan kata-katamu sendiri.

Contoh Kode

tsx
// COMPOUND COMPONENTS PATTERN
import { createContext, useContext, useState } from 'react';

const TabsContext = createContext(null);

function Tabs({ children }) {
  const [activeTab, setActiveTab] = useState(0);
  return (
    <TabsContext.Provider value={{ activeTab, setActiveTab }}>
      <div className="tabs">{children}</div>
    </TabsContext.Provider>
  );
}

function TabList({ children }) {
  return <div className="flex border-b">{children}</div>;
}

function Tab({ index, children }) {
  const { activeTab, setActiveTab } = useContext(TabsContext);
  return (
    <button
      className={activeTab === index ? 'border-b-2 border-blue-500' : ''}
      onClick={() => setActiveTab(index)}
    >
      {children}
    </button>
  );
}

function TabPanel({ index, children }) {
  const { activeTab } = useContext(TabsContext);
  return activeTab === index ? <div className="p-4">{children}</div> : null;
}

Tabs.List = TabList;
Tabs.Tab = Tab;
Tabs.Panel = TabPanel;

// USAGE
<Tabs>
  <Tabs.List>
    <Tabs.Tab index={0}>Account</Tabs.Tab>
    <Tabs.Tab index={1}>Security</Tabs.Tab>
  </Tabs.List>
  <Tabs.Panel index={0}>Account settings here</Tabs.Panel>
  <Tabs.Panel index={1}>Security settings here</Tabs.Panel>
</Tabs>

Penjelasan Kode

Compound components share state via Context. API intuitive dan declarative.

Prompt AI

Apa keuntungan compound components dibanding props drilling?

Pertanyaan Reflektif

Implementasi compound components untuk Accordion.