3. Struktur Direktori: Versi Vite (React Router)
Vite mengandalkan Programmatic Routing yang dikelola di folder routes/ untuk fleksibilitas CSR maksimal.
A. Struktur Modular Saat Ini
Struktur standar terbaru yang meniadakan folder features/, mengelompokkan tampilan halaman di pages/, dan memusatkan seluruh fungsionalitas shared di folder-folder utilitas root.
my-project/
├── components/ # UI COMPONENTS (Atomic Design)
│ ├── atoms/
│ ├── molecules/
│ ├── organisms/
│ └── templates/
├── pages/ # VIEW LAYER (Halaman per rute)
├── routes/ # PUSAT ROUTING
│ ├── index.tsx # Main Router
│ └── PrivateRoute.tsx # Client-Side Auth Guard
├── hooks/ # SHARED CUSTOM HOOKS
├── services/ # GLOBAL API SERVICES
├── store/ # GLOBAL STATE
├── utils/ # UTILITIES (Helpers, formatters)
├── constants/ # APP-WIDE CONSTANTS
├── types/ # GLOBAL TYPES
├── App.tsx # Root Component
├── main.tsx # Entry Point
├── index.html
├── vite.config.ts # DEV PROXY & Vite Config ✅
└── tsconfig.json
B. Struktur Feature-Based Architecture
Struktur lama yang memisahkan fungsionalitas berdasarkan entitas fitur bisnis ke dalam folder features/.
my-project/
├── components/ # GLOBAL UI COMPONENTS
│ ├── ui/ # Atoms
│ ├── shared/ # Molecules
│ ├── organisms/
│ └── templates/
├── features/ # BUSINESS MODULES (Feature-based)
│ ├── [feature-name]/
│ │ ├── components/ # Feature-specific UI
│ │ ├── hooks/ # Feature-specific logic
│ │ └── api/ # Feature-specific services
├── pages/ # VIEW LAYER
├── routes/ # PUSAT ROUTING
│ ├── index.tsx # Main Router
│ └── PrivateRoute.tsx # Client-Side Auth Guard
├── hooks/ # SHARED CUSTOM HOOKS
├── services/ # GLOBAL API SERVICES
├── store/ # GLOBAL STATE
├── types/ # GLOBAL TYPES
├── App.tsx # Root Component
├── main.tsx # Entry Point
├── index.html
├── vite.config.ts # DEV PROXY & Vite Config ✅
└── tsconfig.json
C. Relevansi dan Penerapan di Vite (React Router)
Meskipun Vite + React Router menggunakan Client-Side Rendering (CSR) dan tidak memiliki sistem routing berbasis file bawaan seperti Next.js (App Router), prinsip-prinsip arsitektural dasar di atas tetap sepenuhnya relevan dan wajib diterapkan. Struktur folder Modular (Layer-First) maupun Feature-Based (Domain-First) memiliki signifikansi yang sama dalam menjaga skalabilitas kode.
Kesamaan Arsitektural (Framework-Agnostic Principles)
- Separation of Concerns (SoC): Pemisahan tegas antara UI layer (
components/), view/routing layer (pages/&routes/), data fetcher (services/), dan business logic (hooks/ataustore/) berlaku mutlak di Vite untuk menghindari kode spaghetti. - Reusabilitas Kode: Penggunaan metodologi Atomic Design di folder
components/bekerja secara identik baik di Next.js maupun Vite untuk memastikan konsistensi antarmuka pengguna. - Penyederhanaan Build & Dev Server: Struktur yang terorganisir dengan baik membantu bundler Vite mengoptimalkan proses code-splitting secara otomatis saat melakukan kompilasi produksi.
Perbedaan Utama Penerapan di Vite vs Next.js
| Fitur / Parameter | Next.js (App Router) | Vite (React Router SPA) |
|---|---|---|
| Sistem Routing | File-based Routing: Ditentukan oleh struktur direktori di dalam folder app/. File page.tsx menjadi entri point URL secara otomatis. | Programmatic Routing: Dikelola secara terpusat di folder routes/ (misalnya menggunakan react-router-dom). Halaman didefinisikan di folder pages/ dan didaftarkan secara manual ke router. |
| Lokasi Logic & Components | Colocation Terbatas: File non-route disarankan diletakkan di luar folder app/ agar aman dari pembacaan router. | Kebebasan Penuh: Tidak ada batasan teknis dari framework untuk meletakkan file di dalam folder mana pun. Oleh karena itu, disiplin tim sangat krusial. |
| Auth Guard & Proteksi Rute | Menggunakan proxy.js di level network proxy dan Middleware Next.js untuk intersepsi request server-side. | Menggunakan komponen pembungkus Client-Side (seperti <PrivateRoute>) untuk memproteksi komponen halaman sebelum dirender. |
Analisis Perbandingan di Vite: Modular vs Feature-Based
Sama seperti Next.js, Anda harus memilih struktur berdasarkan skala proyek Anda:
- Pilihan A: Struktur Modular (Layer-First)
- Kapan Digunakan: Sangat direkomendasikan untuk proyek SPA skala kecil hingga menengah (misalnya dashboard internal tunggal, micro-utility, landing page dengan interaksi kompleks).
- Mengapa: Mengurangi overhead pembuatan file (boilerplate) dan mempercepat pengembangan awal karena tim dapat dengan cepat menemukan utilitas global, hooks, dan komponen yang dikelompokkan secara terpusat.
- Pilihan B: Struktur Feature-Based (Domain-First)
- Kapan Digunakan: Wajib untuk aplikasi portal enterprise skala besar yang memiliki banyak modul bisnis independen (misalnya platform e-commerce terintegrasi, core banking frontend).
- Mengapa: Mengurangi risiko kepemilikan file yang kabur (shared ownership). Setiap tim fitur dapat mengelola komponen, hooks, dan API instance milik mereka sendiri di bawah satu folder domain (misalnya
features/checkout/), menghindari konflik merge git, serta mempermudah migrasi masa depan ke sistem Monorepo.
Referensi Industri Terkait Arsitektur React:
- React Official Documentation - File Structure: Penjelasan dasar React mengenai kebebasan arsitektur file dan rekomendasi pembagian berdasarkan domain bisnis atau tipe teknis.
- Robin Wieruch - React Folder Structure (Feature-Based): Analisis mendalam mengenai evolusi dari struktur teknis (modular) menuju domain-based (feature-based) seiring berkembangnya aplikasi React.
- Bulletproof React - Project Structure Guide: Standar emas arsitektur modern untuk aplikasi React skala enterprise, yang sangat menganjurkan pendekatan Feature-Based untuk membatasi kopling antar modul.