React Patterns: Compound Components
Pattern untuk komponen yang saling terkait
Tujuan Pembelajaran
- Memahami compound components pattern
- Bisa mengimplementasikan compound components
Analogi
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
- Buat context untuk share state antara parent dan children.
- Parent component (Container) menjadi Provider.
- 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
// 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
Prompt AI
Apa keuntungan compound components dibanding props drilling?
Pertanyaan Reflektif
Implementasi compound components untuk Accordion.