August 30, 2026
Arsitektur Aplikasi React.
Pola penataan folder dan struktur proyek React modern: pendekatan berbasis fitur, pemisahan komponen, dan praktik menjaga proyek tetap mudah dikembangkan seiring bertambah besar.
React sendiri tidak memaksakan struktur folder tertentu, sehingga banyak tim pemula bingung menata proyek begitu jumlah komponennya mulai banyak. Berikut pola-pola yang umum dipakai dan pertimbangan di baliknya.
Struktur Berbasis Tipe File (Pola Lama)
src/
components/
TombolPrimer.jsx
KartuProduk.jsx
FormLogin.jsx
hooks/
useAuth.js
useCart.js
pages/
Beranda.jsx
Produk.jsx
Pola ini mudah dipahami di awal, tapi begitu proyek membesar, file yang saling berhubungan justru tersebar di banyak folder berbeda — mengedit satu fitur berarti berpindah bolak-balik antar folder.
Struktur Berbasis Fitur (Pola yang Lebih Disarankan)
src/
features/
autentikasi/
FormLogin.jsx
useAuth.js
authSlice.js
produk/
KartuProduk.jsx
DaftarProduk.jsx
useProduk.js
components/
TombolPrimer.jsx
Modal.jsx
Folder features/ mengelompokkan semua file yang berkaitan dengan satu domain bisnis tertentu, sementara components/ khusus untuk komponen generik yang dipakai lintas fitur. Pendekatan ini membuat satu fitur bisa dipahami, diubah, bahkan dihapus tanpa perlu menyentuh banyak folder lain.
Memisahkan Logika dari Tampilan
// useProduk.js — logika data
export function useProduk() {
const [produk, setProduk] = useState([]);
useEffect(() => {
fetch("/api/produk").then((r) => r.json()).then(setProduk);
}, []);
return produk;
}
// DaftarProduk.jsx — tampilan
function DaftarProduk() {
const produk = useProduk();
return (
<ul>
{produk.map((p) => <li key={p.id}>{p.nama}</li>)}
</ul>
);
}
Memisahkan custom hook (logika) dari komponen (tampilan) membuat keduanya lebih mudah diuji dan dipakai ulang secara terpisah.
Barrel File untuk Import Lebih Ringkas
// features/produk/index.js
export { default as DaftarProduk } from "./DaftarProduk";
export { useProduk } from "./useProduk";
import { DaftarProduk, useProduk } from "@/features/produk";
Barrel file (index.js) menyembunyikan struktur internal folder, sehingga bagian lain aplikasi cukup mengimpor dari satu titik tanpa tahu detail file di dalamnya.
Layer Terpisah untuk Panggilan API
src/
api/
produkApi.js
authApi.js
// api/produkApi.js
export async function ambilProduk() {
const res = await fetch("/api/produk");
return res.json();
}
Menaruh semua panggilan fetch di satu layer terpisah memudahkan penggantian sumber data di kemudian hari — misalnya beralih dari REST ke GraphQL — tanpa perlu mengubah komponen yang memakainya.
Kesimpulan
Struktur berbasis fitur umumnya lebih tahan lama dibanding pengelompokan berdasarkan tipe file, karena mengikuti bagaimana tim sebenarnya bekerja: satu fitur, satu folder. Tidak ada struktur yang benar secara mutlak — yang terpenting adalah konsistensi dan kemudahan tim menemukan file yang mereka cari saat proyek terus bertumbuh.

Hey! I’m Fanny, the software engineer tending to this digital garden. You can read more about me, or subscribe by email.