Episode ini membahas component-driven architecture dan atomic design, feature modules dengan struktur folder yang scalable, composition patterns dan render props, serta design system untuk membangun UI yang konsisten dan reusable.

Ketika proyek tumbuh, struktur folder dan pola komponen menentukan apakah tim kalian bergerak cepat atau tersendat. Episode 18 membahas arsitektur yang membuat React scalable: bagaimana memecah UI, mengorganisasi folder, dan memilih pola komposisi yang tepat.
Kita mulai dari component-driven architecture dengan atomic design, lalu feature modules dan struktur folder, kemudian composition patterns dengan render props, dan diakhiri design system untuk konsistensi di seluruh aplikasi.
Atomic design memecah UI menjadi lima level, dari terkecil ke terbesar:
atom -> molekul -> organisme -> template -> halamanKekuatan pendekatan ini: setiap level bisa diuji dan dipakai ulang, dan perubahan di level bawah otomatis menyebar ke atas.
Mulai dari komponen terkecil lalu naik level. Buat komponen di bawah dulu dengan mock data, pastikan mereka bekerja, baru susun menjadi halaman. Ini mempersingkat debugging karena kalian tahu persis di level mana masalah berada.
Dua pendekatan umum: folder by type dan folder by feature. Untuk proyek yang bertumbuh, folder by feature jauh lebih scalable:
src/
├── features/
│ ├── auth/
│ │ ├── AuthPage.jsx
│ │ ├── LoginForm.jsx
│ │ └── authApi.js
│ └── produk/
│ ├── DaftarProduk.jsx
│ ├── KartuProduk.jsx
│ └── produkApi.js
├── components/
│ ├── ui/ # komponen shared (atom)
│ └── layout/ # header, footer, sidebar
├── hooks/
└── utils/features/auth/ mengelompokkan semua yang berhubungan dengan autentikasi — halaman, komponen, dan API-nya. Fitur yang tidak terpakai mudah dihapus, dan tim bisa bekerja paralel tanpa konflik.
Satu aturan penting: fitur tidak boleh saling mengimpor komponen internal. Jika dua fitur butuh hal yang sama, naikkan ke components/ui atau hooks. Ini menjaga dependensi mengalir satu arah dan memudahkan pengujian.
Render props adalah pola di mana komponen menerima fungsi yang mengembalikan JSX, memberi kontrol penuh kepada pemakainya:
function MouseTracker({ render }) {
const [pos, setPos] = React.useState({ x: 0, y: 0 })
return (
<div
onMouseMove={(e) => setPos({ x: e.clientX, y: e.clientY })}
>
{render(pos)}
</div>
)
}
function App() {
return (
<MouseTracker
render={({ x, y }) => <p>Posisi: {x}, {y}</p>}
/>
)
}render={({ x, y }) => <p>Posisi: {x}, {y}</p>} memutuskan bagaimana posisi mouse ditampilkan. Komponen MouseTracker hanya bertanggung jawab melacak posisi; pemakainya yang memilih tampilan.
React modern lebih sering memakai composition biasa (props dan children) daripada render props. Pola render props tetap berguna saat kalian butuh membagikan perilaku, bukan hanya tampilan — dan banyak library memakainya di balik layar.
Pola maju lain: compound components — komponen induk dan anak yang bekerja sebagai satu kesatuan. Contoh <Select> dengan <Select.Option>, seperti yang dipakai komponen aksesibel ARIA dari episode 17. Anak-anak berkomunikasi dengan induk lewat context.
Design system adalah kumpulan komponen, aturan, dan token yang menjaga konsistensi. Fondasinya adalah design tokens: nilai dasar seperti warna dan spasi:
export const tokens = {
warna: {
primer: "#2563eb",
teks: "#0f172a",
latar: "#f8fafc",
},
spasi: {
xs: "4px",
md: "16px",
lg: "24px",
},
}tokens.warna.primer dipakai di semua komponen alih-alih nilai hex acak. Ubah satu nilai token, seluruh aplikasi berubah — konsistensi dijaga dari satu sumber.
Kumpulkan komponen ui/ menjadi library yang didokumentasikan. Ceritakan di setiap komponen: props yang diterima, contoh pemakaian, dan kondisi edge case. Library yang baik mempercepat pengembangan karena tim tidak menulis ulang tombol yang sama.
npm install -D @storybook/react-vitenpm install -D @storybook/react-vite memasang Storybook, tool yang menampilkan tiap komponen dengan mock state-nya. Storybook menjadikan design system kalian mudah dilihat, diuji, dan dikembangkan.
Episode 18 menata arsitektur React: component-driven architecture dengan atomic design, feature modules dan struktur folder yang scalable, composition patterns dengan render props, serta design system untuk konsistensi seluruh aplikasi.
Inti yang harus dibawa pulang:
Di episode 19 selanjutnya kita akan membahas modern tooling & build automation — Vite sebagai bundler modern, ESLint dan Prettier untuk code quality, integrasi TypeScript ke React, serta optimasi build dan bundle production. Proyek kalian akan dibangun di atas fondasi yang kokoh.