pertanyaan 1 : ketika saya menjalankan perintah npx-create-expo-app maka secara otomatis saya akan dibuatkan folder (tabs) yang terdapat pada folder app, dimana isi folder (tabs) tersebut adalah file index.tsx, _layout.tsx dan explore.tsx. sementara pada folder app otomatis akan terdapat file _layout.tsx dan not-found.tsx. pertanyaan ? apa fungsi folder (tabs) dan apa bedanya _layout.tsx pada folder app dengan pada folder (tabs)?
jawaban :
Fungsi Folder (tabs) dalam Expo Router
Ketika menjalankan perintah:
npx create-expo-app myApp
Expo Router secara otomatis membuat folder (tabs) di dalam folder app, yang berisi file index.tsx, _layout.tsx, dan explore.tsx.
π Apa fungsi folder (tabs)?
Folder (tabs) digunakan untuk mengelompokkan navigasi berbasis Tab.
Nama folder dalam tanda kurung ()` menandakan bahwa folder ini adalah grup layout (bukan bagian dari URL).
Semua file dalam (tabs) akan otomatis menjadi bagian dari Tab Navigation.
Perbedaan _layout.tsx dalam app/ vs app/(tabs)/
Expo Router memungkinkan penggunaan nested layout, dan perbedaan utama adalah sebagai berikut:
π app/_layout.tsx (Layout Global - Root Layout)
Digunakan untuk mendefinisikan layout utama aplikasi, seperti Stack Navigation yang membungkus semua halaman.
Layout ini diterapkan ke seluruh aplikasi, termasuk halaman di dalam (tabs).
Biasanya berisi konfigurasi seperti Stack atau Drawer Navigation.
Contoh app/_layout.tsx:
`import { Stack } from "expo-router";
export default function RootLayout() {
return (
);
}
`
π― Hasil:
Semua halaman di dalam aplikasi akan menggunakan Stack Navigation.
Navigasi berbasis tab di dalam (tabs) tetap ada, tetapi dibungkus dalam stack ini.
π app/(tabs)/_layout.tsx (Layout Spesifik untuk Tab Navigation)
Hanya berlaku untuk halaman dalam folder (tabs).
Digunakan untuk mendefinisikan Tab Navigation khusus.
Tidak mempengaruhi halaman lain di luar folder (tabs).
Contoh app/(tabs)/_layout.tsx:
`
import { Tabs } from "expo-router";
export default function TabsLayout() {
return (
);
}
`
π― Hasil:
Hanya halaman di dalam folder (tabs) yang mendapatkan Tab Navigation.
Halaman lain di luar (tabs), misalnya profile.tsx, tidak memiliki tab karena tidak termasuk dalam layout ini.
- Kesimpulan
- File app/_layout.tsx memiliki fungsi sebagai Layout utama untuk seluruh aplikasi, biasanya menggunakan Stack Navigation.
- File app/(tabs)/_layout.tsx memiliki fungsi sebagai Layout khusus untuk Tab Navigation, hanya berlaku untuk halaman di dalam (tabs).
π Ilustrasi Struktur Navigasi
/app
βββ _layout.tsx # Root Layout (Stack Navigation)
βββ not-found.tsx # Halaman untuk 404
βββ profile.tsx # Halaman terpisah dari tab
βββ (tabs)/ # Grup Tab Navigation
β βββ _layout.tsx # Layout untuk Tab Navigation
β βββ index.tsx # Tab "Home"
β βββ explore.tsx # Tab "Explore"
Bagaimana ini bekerja?
β
Saat user membuka /profile, hanya app/_layout.tsx yang berlaku.
β
Saat user membuka / atau /explore, Expo Router akan menggunakan tab navigation dari (tabs)/_layout.tsx.
π― Kesimpulan Utama:
- app/_layout.tsx β Layout global untuk semua halaman dalam aplikasi (misalnya Stack Navigation).
- app/(tabs)/_layout.tsx β Layout khusus untuk Tab Navigation, hanya berlaku untuk halaman dalam (tabs).
- Folder (tabs) adalah grup layout yang berfungsi sebagai wrapper untuk navigasi berbasis tab.
Jadi, Expo Router memungkinkan kita menggabungkan Stack Navigation dan Tab Navigation dengan cara yang lebih terstruktur!
pertanyaan 2 : kemudian jika saya hendak membuat folder baru dalam app apakah wajib penamaannya seperti (tabs) . misal saya ingin buat folder setting, apakah setting tersebut wajib diisi dengan tanda kurung seperti tabs?
jawabannya :
Tidak, penamaan folder dalam app/ tidak wajib menggunakan tanda kurung ( ... ), kecuali jika ingin membuat layout grup.
Kapan Harus Menggunakan Tanda Kurung ( ... )?
Dalam Expo Router, tanda kurung () digunakan untuk grup layout. Artinya, folder tersebut tidak mempengaruhi URL.
Contoh:
Jika ada struktur berikut:
/app
βββ (tabs)/
β βββ _layout.tsx # Layout untuk Tab Navigation
β βββ index.tsx # Home Tab
β βββ explore.tsx # Explore Tab
βββ profile.tsx # Halaman profile
π URL yang dihasilkan:
/ β index.tsx dalam (tabs)
/explore β explore.tsx dalam (tabs)
/profile β profile.tsx (karena ada langsung di app/)
π Folder (tabs) tidak muncul di URL, karena tanda kurung menunjukkan bahwa itu hanya grup navigasi.
Jika Saya Membuat Folder settings/, Apakah Harus (settings)?
β Tidak wajib menggunakan (settings), kecuali jika ingin menjadikannya grup layout.
Contoh tanpa tanda kurung:
/app
βββ settings/
β βββ index.tsx # Halaman "/settings"
β βββ profile.tsx # Halaman "/settings/profile"
π URL yang dihasilkan:
/settings β settings/index.tsx
/settings/profile β settings/profile.tsx
Jika settings/ Menggunakan (settings)/
Jika menggunakan (settings)/, maka folder tersebut tidak akan muncul di URL, tetapi tetap berfungsi untuk mengelompokkan navigasi.
Contoh dengan tanda kurung:
/app
βββ (settings)/
β βββ _layout.tsx # Layout khusus untuk grup ini
β βββ index.tsx # Halaman "/"
β βββ profile.tsx # Halaman "/profile"
π URL yang dihasilkan:
/ β index.tsx dalam (settings)
/profile β profile.tsx dalam (settings), bukan /settings/profile
Kapan Sebaiknya Menggunakan ( ... )?
Gunakan tanda kurung ( ... ) jika:
β
Ingin mengelompokkan halaman tanpa menambah path di URL.
β
Ingin membuat layout khusus untuk grup halaman tertentu.
Contoh:
Misalnya kita ingin membuat layout terpisah untuk halaman pengaturan tanpa menampilkan /settings/ di URL.
`
// app/(settings)/_layout.tsx
import { Stack } from "expo-router";
export default function SettingsLayout() {
return (
);
}
`
Kesimpulan
β
Gunakan settings/ jika ingin URL menjadi /settings dan /settings/profile.
β
Gunakan (settings)/ jika ingin menyembunyikan settings dari URL, tetapi tetap mengelompokkan navigasi.
Jadi, tanda kurung tidak wajib kecuali jika ingin membuat grup navigasi tanpa mengubah struktur URL!