Pengenalan Direktori

Setelah lo bikin project baru, lo bakal nemu struktur folder dan file yang udah ada secara bawaan. Beberapa file lo bisa liat secara langsung, tapi ada juga beberapa yang disembunyiin secara default, kayak entry.client.tsx dan entry.server.tsx contohnya. Ini karena emang file-file tersebut nggak perlu di-apa-apain, kecuali ada case khusus yang lo butuhin.

.react-router

Folder ini di-generate otomatis sama CLI-nya React Router. Isi dari folder ini adalah informasi kayak type yang di-generate otomatis sesuai konfigurasi di file app/routes.ts. Secara umum, lo nggak perlu ngurusin folder ini, tapi lo bisa liat-liat isinya kalo lo penasaran.

app

Folder ini bisa lo isi dengan kode aplikasi lo. Beda dengan Next.js, di dalem folder ini nggak banyak file convention dan ada beberapa file bawaan:

app/routes.tsx

File ini adalah file konfigurasi routing yang bisa lo sesuaikan dan file ini juga yang jadi sumber React Router buat nge-generate type untuk setiap route module (lo bisa baca lebih lanjut di bagian Routing).

app/root.tsx

File ini juga bisa disebut root route, dia yang bakal jadi parent buat semua route yang ada di aplikasi lo. Kalo di Next.js, ini mirip kayak root layout-nya mereka lah atau file app/layout.tsx. Ini kenapa apa yang lo declare di file ini, bakal "dibagi" ke semua route yang ada di aplikasi lo.

Di dalem file ini lo bakal nemu <Outlet />, yang fungsinya buat nge-render child route. Jadi, setiap route yang lo bikin di dalam file routes.tsx, bakal di-render di dalam <Outlet /> ini.

app/root.tsx

Juga lo bakal nemu export function Layout yang bisa lo pake buat nge-define layout component buat ngebungkus setiap route. Setiap kali user pindah route, layout ini bakal tetep ada dan nggak bakal di-render ulang. Karena file ini adalah root route, jadi lo harus define tag <html>, <head>, dan <body> di dalamnya. Mirip kayak app/layout.tsx di Next.js.

app/root.tsx

Lo bisa juga import global CSS kayak gini:

app/root.tsx

Bisa juga export component ErrorBoundary yang bakal dipake buat handle error di seluruh aplikasi lo (termasuk error 404). Kalo di Next.js, ini mirip app/global-error.tsx perannya.

app/root.tsx

Lo juga bisa export links buat nge-load CSS external kayak Google Fonts, misalnya:

app/root.tsx

File ini juga support beberapa fitur yang bisa dipake di route module, kayak loader dan action contohnya.

Colocation

Selain kedua file di atas, sebenernya ada folder lain dengan nama welcome yang ada di dalam folder app. Isi dari folder ini cuman satu file welcome.tsx dan dua file logo. Lo bisa hapus folder ini kalo lo mau, karena ini cuman contoh aja.

Lo bisa bikin folder lain di dalam folder app buat naro file-file yang lo butuhin, misal components, utils, atau hooks. Gue sendiri nge-treat folder app ini kayak folder src yang biasanya ada di project React lainnya. Tapi, ini preferensi pribadi aja, lo bisa naruh file-file lo di luar folder app kalo mau. Gue cuman ngasih tau aja kalo cara ini aman dan lo nggak perlu khawatir ada file yang namanya bakal bentrok sama convention yang ada di React Router. Soalnya ada framework lain yang bentar lagi mau mati ketiban convention-nya sendiri.

public

Folder public ini adalah tempat lo naro file-file statis yang bisa diakses langsung dari URL. Misalnya, lo mau naro gambar atau file aset yang bisa diakses langsung, lo bisa taro di sini.

vite.config.ts

React Router ini pake Vite sebagai bundler-nya, jadi lo bakal nemuin file konfigurasi Vite di sini. Lo bisa ubah konfigurasi Vite sesuai kebutuhan lo, misalnya nambahin plugin kayak Tailwind CSS atau apaun lah pokoknya. Nyatanya, Tailwind CSS ini udah di-setup secara bawaan, jadi lo tinggal pake aja.

react-router.config.ts

Ini adalah file konfigurasi React Router. Secara umum, lo nggak perlu ngubah apa-apa di sini, kecuali ada prilaku dari React Router yang mau lo ubah, kayak nge-disable SSR atau nge-enable feature experimental contohnya.


Kamu Menyelesaikan Pelajaran Ini

Login untuk menyimpan progres belajarmu.


Kamu stuck? Ajukan pertanyaan!

Kolom ini hanya untuk pertanyaan terkait masalah yang mungkin kamu temui, tidak untuk yang lain.

Login untuk berkomentar 🔒

Markdown