stdsquare²
🎓 Kelas
stdsquare / materi / slides / pertemuan-07
Tema
Japan
Arcade
Dark Retro
Font
‹ Daftar slide Pertemuan 7: Implementasi navigasi antarhalaman dan routing dalam aplikasi mobile
Program Studi Bisnis Digital • FEB UNDIP

Lab Pemrograman

Pertemuan 7 — Implementasi Navigasi Antarhalaman dan Routing dalam Aplikasi Mobile

Bagaimana pengguna berpindah dari satu layar ke layar lain dalam aplikasi mobile Anda — dan bagaimana data ikut berpindah bersamanya.

RPS minggu 7 · 2x50 menit

Tujuan Pembelajaran Hari Ini

Empat capaian yang harus Anda kuasai setelah pertemuan ini, sejalan dengan Sub-CPMK minggu 7.

Sub-CPMK 7.1
01
Menjelaskan konsep navigasi dan routing serta peran navigation stack dalam aplikasi mobile.
Sub-CPMK 7.2
02
Mempraktikkan pemasangan dan konfigurasi React Navigation beserta Stack Navigator.
Sub-CPMK 7.3
03
Menerapkan navigate(), goBack(), dan pengiriman params antar layar.
Sub-CPMK 7.4
04
Membedakan dan menyusun Tab Navigator, Drawer Navigator, dan navigator bersarang (nested).

Mengapa Ini Penting bagi Bisnis Digital?

Bayangkan Anda membangun aplikasi marketplace kecil untuk UMKM di Semarang. Pengguna perlu berpindah antar puluhan layar dengan mulus.

Masalah 1 — Alur tanpa arah. Tanpa sistem navigasi, Anda harus menampilkan-dan-menyembunyikan komponen secara manual untuk tiap layar — kode cepat berantakan dan sulit dirawat begitu aplikasi punya lebih dari 3 layar.
Masalah 2 — Data terputus. Saat pengguna men-tap produk "Kopi Robusta Muria" di daftar katalog, layar detail perlu tahu produk yang mana yang harus ditampilkan. Tanpa mekanisme kirim data antar layar, informasi ini hilang begitu berpindah halaman.
Bagian 1 dari 3
Konsep Navigasi & Stack Navigator
Bagaimana aplikasi mobile mengingat layar mana yang sedang dan pernah dibuka pengguna, lalu memasang navigator pertama Anda.

Apa Itu Navigasi dan Routing?

Navigasi adalah mekanisme aplikasi berpindah dari satu layar (screen) ke layar lain. Routing adalah aturan yang menentukan layar mana yang ditampilkan untuk suatu "rute" (route) tertentu.

Stack NavigatorLayar bertumpuk,maju & kembali (back)Tab NavigatorMenu tab di bawah,sejajar tanpa tumpukanDrawer NavigatorMenu geser daritepi samping layar

Ketiganya berasal dari satu pustaka: React Navigation, standar navigasi paling umum dipakai di ekosistem React Native.

Memasang React Navigation ke Proyek Anda

Tiga langkah dasar sebelum navigasi bisa dipakai: pasang paket inti, pasang paket Stack Navigator, lalu bungkus aplikasi dengan NavigationContainer.

Langkah 1 — Pasang paket
npm install @react-navigation/native npm install @react-navigation/native-stack

Dijalankan sekali di terminal, di dalam folder proyek React Native Anda.

Langkah 2 — Bungkus App.js
import { NavigationContainer } from '@react-navigation/native'; export default function App() { return ( <NavigationContainer> {/* Navigator diletakkan di sini */} </NavigationContainer> ); }

Stack Navigator: Menumpuk dan Menurunkan Layar

Setiap kali Anda memanggil navigate(), layar baru "ditumpuk" (push) di atas layar sebelumnya. Tombol kembali "menurunkan" (pop) layar teratas.

HomeKatalogDetail Produkpush() → menambahlayar di atas stackgoBack() ← pop() menurunkan layar teratas
import { createNativeStackNavigator } from '@react-navigation/native-stack'; const Stack = createNativeStackNavigator(); <Stack.Navigator> <Stack.Screen name="Home" component={HomeScreen} /> <Stack.Screen name="Katalog" component={KatalogScreen} /> </Stack.Navigator>

Hitung dari Nol: Ukuran Navigation Stack

Pengguna membuka aplikasi Toko Anira, lalu tap tiga kali berturut-turut: Katalog → Detail Produk → Checkout. Setiap navigate() menambah 1 layar ke stack.

LangkahPerhitunganUkuran Stack
Aplikasi dibuka, layar awal Home dimuatstack = 0 + 1 (push Home)1 layar
Tap produk → navigate('Katalog')stack = 1 + 1 (push Katalog)2 layar
Tap item → navigate('DetailProduk')stack = 2 + 1 (push DetailProduk)3 layar
Tap "Beli" → navigate('Checkout')stack = 3 + 1 (push Checkout)4 layar
SETELAH TEKAN TOMBOL KEMBALI
3 layar
4 − 1 (pop Checkout)
Stack tersisa: Home, Katalog, DetailProduk — pengguna kembali persis ke Detail Produk yang tadi dilihat, bukan ke Home.

Coba Sendiri: Simulasikan Push dan Pop Navigation Stack

Tekan tombol navigasi untuk push layar baru dan tombol kembali untuk pop, lalu amati susunan stack berubah.

Bagian 2 dari 3
Mengirim Data Antar Layar (Params)
Bagaimana informasi seperti ID produk ikut berpindah bersama pengguna, dari daftar katalog sampai ke layar detail.

Mengirim Data: navigate() dengan Params

Fungsi navigation.navigate() menerima argumen kedua berupa objek params — data apa pun yang ingin Anda kirim ke layar tujuan.

Di layar Katalog — kirim data produk
function KatalogScreen({ navigation }) { return ( <Button title="Kopi Robusta Muria" onPress={() => navigation.navigate('DetailProduk', { idProduk: 305, nama: 'Kopi Robusta Muria', harga: 28000 })} /> ); }

Objek { idProduk, nama, harga } ini akan "menempel" pada layar DetailProduk saat dibuka.

Membaca Data: route.params di Layar Tujuan

Setiap komponen layar otomatis menerima prop route dari React Navigation. Data yang dikirim tadi tersimpan di route.params.

Di layar DetailProduk — baca data yang dikirim
function DetailProdukScreen({ route }) { const { idProduk, nama, harga } = route.params; return ( <View> <Text>{nama}</Text> <Text>Rp{harga}</Text> <Text>ID: {idProduk}</Text> </View> ); }
Params bersifat khusus per-layar — setiap kali Anda navigate ke DetailProduk dengan produk berbeda, route.params ikut berubah sesuai data terbaru.

Hitung dari Nol: Kedalaman Rute dari Deep Link

Aplikasi Toko Anira menerima tautan luar (deep link): tokoanira://kategori/12/produk/305. Setiap segmen menambah satu tingkat kedalaman rute.

LangkahPerhitunganKedalaman
Segmen 1: kategoridepth = 0 + 11
Segmen 2 (param): 12depth = 1 + 12
Segmen 3: produkdepth = 2 + 13
Segmen 4 (param): 305depth = 3 + 14
HASIL PARSING route.params
4 tingkat
2 rute bersarang, 2 nilai param
{ kategoriId: 12, produkId: 305 }

Kapan Memakai Tab vs Drawer Navigator?

Berbeda dengan Stack, Tab dan Drawer Navigator tidak menumpuk layar — keduanya menampilkan beberapa layar "utama" yang sejajar.

AspekTab NavigatorDrawer Navigator
Posisi menuBawah layar (bottom tab)Geser dari tepi samping
Jumlah item ideal3–5 item (selalu terlihat)5–10 item (tersembunyi)
Contoh nyataBeranda, Katalog, Keranjang, ProfilPengaturan, Bantuan, Tentang, Keluar
Cocok untukFitur utama yang sering diaksesFitur sekunder, jarang diakses
Bagian 3 dari 3
Navigator Bersarang & Praktik
Menggabungkan Stack, Tab, dan Drawer dalam satu aplikasi — struktur yang dipakai hampir semua aplikasi bisnis digital nyata.

Navigator Bersarang: Stack di Dalam Tab

Pola paling umum di aplikasi nyata: setiap tab menyimpan Stack Navigator-nya sendiri, sehingga bisa berpindah layar internal tanpa kehilangan menu tab.

Tab Navigator (Beranda | Katalog | Keranjang | Profil)Tab "Katalog"Stack Navigator sendiri:DaftarKatalog → DetailProduk→ CheckoutTab "Profil"Stack Navigator sendiri:DataAkun → UbahPassword

Menu tab tetap terlihat, sementara di dalam tab "Katalog" pengguna bisa push-pop layar seperti biasa.

Konfigurasi Opsi Rute Dasar

Tiap Stack.Screen bisa diberi properti options untuk mengatur judul header, dan initialRouteName menentukan layar pembuka Navigator.

<Stack.Navigator initialRouteName="Home"> <Stack.Screen name="Home" component={HomeScreen} options={{ title: 'Toko Anira' }} /> <Stack.Screen name="DetailProduk" component={DetailProdukScreen} options={({ route }) => ({ title: route.params.nama })} /> </Stack.Navigator>
Perhatikan baris terakhir: judul header DetailProduk otomatis berubah sesuai route.params.nama — misalnya menjadi "Kopi Robusta Muria" saat produk itu dibuka.

Studi Kasus: Alur Navigasi Toko Anira

Merangkum semua konsep hari ini menjadi satu alur nyata: dari login sampai konfirmasi pembelian.

LoginBeranda(Tab Navigator)Detail Produkparams: idProdukCheckoutparams: keranjangKonfirmasi
Setelah Login berhasil, layar Login diganti (bukan di-push) memakai navigation.replace('Beranda') — supaya tombol kembali tidak membawa pengguna ke Login lagi.

Kesalahan Umum yang Perlu Anda Hindari

1. Lupa daftarkan layar di Navigator. Memanggil navigate('DetailProduk') padahal Stack.Screen name="DetailProduk" belum ditulis — aplikasi akan error "screen not found".
2. Salah baca params karena typo nama key. Mengirim { idProduk: 305 } tapi membaca route.params.id_produk — hasilnya undefined, bukan error yang jelas.
3. Memakai navigate() padahal butuh replace(). Alur Login → Beranda memakai navigate biasa membuat tombol kembali membawa pengguna ke Login lagi, membingungkan pengguna.
Kebiasaan baik: beri nama layar dan key params secara konsisten (misalnya selalu camelCase), lalu uji tombol kembali di setiap alur baru yang Anda buat.

Latihan Kelas: Alur Navigasi Marketplace Mini

Kerjakan berpasangan (15 menit) di dalam proyek React Native Anda, lalu satu pasangan akan diminta mendemonstrasikan hasilnya.

Instruksi
  • Pasang @react-navigation/native dan native-stack, bungkus App.js dengan NavigationContainer
  • Buat 3 layar: Beranda, DetailProduk, Checkout, daftarkan sebagai Stack.Screen
  • Dari Beranda, kirim minimal 2 params (nama & harga produk) ke DetailProduk memakai navigate()
  • Tampilkan params tersebut memakai route.params di layar DetailProduk
Tantangan tambahan (opsional): Atur judul header layar DetailProduk agar otomatis menampilkan route.params.nama, seperti pada Slide 16 tadi.

Ringkasan & Pertemuan Berikutnya

Yang Sudah Anda Kuasai
  • Konsep navigation stack: push saat navigate, pop saat kembali
  • Memasang React Navigation dan membangun Stack Navigator
  • Mengirim & membaca data antar layar lewat params dan route.params
  • Navigator bersarang: Stack di dalam Tab, serta beda Tab vs Drawer
Pertemuan 8 — Perancangan dan Pengujian REST API. Setelah pengguna bisa berpindah antar layar dengan data yang tepat, minggu depan kita belajar bagaimana data itu diambil dari server lewat REST API, menggantikan data contoh yang selama ini kita tulis manual di dalam kode.