ReactJS #17: React Router Part 2
Membuat Menu dan Halaman Detail dari API
Halo, penjelajah rute! 🧭
Di artikel sebelumnya kita sudah belajar membuat navigasi antar halaman statis. Sekarang saatnya kita membuat aplikasi yang lebih dinamis: menampilkan daftar dari API, lalu setiap item bisa diklik untuk melihat detailnya. Ini adalah pola yang sangat umum di aplikasi web (misal: daftar berita, daftar produk, daftar postingan).
📚 Apa yang Akan Kita Buat?
Kita akan membuat aplikasi sederhana dengan dua halaman:
- Halaman Daftar Postingan – Mengambil data dari
https://jsonplaceholder.typicode.com/postsdan menampilkan daftar judul. Setiap judul adalah link ke halaman detail. - Halaman Detail Postingan – Mengambil data detail postingan berdasarkan ID dari URL (misal:
/post/1) menggunakan parameter rute. Menampilkan judul, isi, dan informasi penulis.
Kita juga akan belajar cara mengambil data di halaman detail berdasarkan parameter URL.
🧱 Langkah 1: Setup Router (Jika Belum)
Pastikan kamu sudah menginstal React Router di proyekmu:
Buat folder src/pages jika belum ada. Kita akan buat dua komponen halaman: PostList.js dan PostDetail.js.
📋 Langkah 2: Membuat Halaman Daftar Postingan
Buat file src/pages/PostList.js:
Perhatikan: Link menggunakan path dinamis /post/${post.id}. Ini akan menghasilkan URL seperti /post/1, /post/2, dst.
🔍 Langkah 3: Membuat Halaman Detail Postingan
Buat file src/pages/PostDetail.js:
Penjelasan:
- useParams() – Hook dari React Router untuk mengambil parameter dari URL. Di sini kita mengambil
idyang didefinisikan di path/post/:id. - Kita melakukan dua kali fetch: pertama untuk detail postingan, kedua untuk data penulis berdasarkan
userId. - Dependency array
[id]memastikan efek dijalankan ulang jika parameter berubah (misal dari/post/1ke/post/2). - Tombol kembali menggunakan
Linkke halaman utama.
⚙️ Langkah 4: Mengatur Rute di App.js
Sekarang kita atur routing di src/App.js:
Perhatikan rute /post/:id. Tanda : menunjukkan bahwa id adalah parameter dinamis.
🎨 Langkah 5: Sedikit CSS (Opsional)
Tambahkan gaya di src/App.css atau di <style> untuk membuat tampilan lebih menarik. Beberapa gaya sudah kita tulis di dalam artikel ini, kamu bisa menyesuaikan.
🧪 Langkah 6: Uji Coba
Jalankan aplikasi dengan npm start. Coba:
- Halaman utama akan menampilkan daftar judul postingan.
- Klik salah satu judul. Kamu akan diarahkan ke halaman
/post/1(atau ID lainnya). - Halaman detail akan menampilkan judul, isi, dan penulis (setelah mengambil data).
- Klik tombol "Kembali ke Daftar" untuk kembali ke halaman utama.
- Coba ketik langsung URL
/post/999(ID yang tidak ada). Seharusnya muncul error "Postingan tidak ditemukan".
🧩 Penjelasan Parameter URL
Parameter URL (atau route parameter) adalah bagian dari URL yang bisa berubah-ubah. Di React Router, kita mendefinisikannya dengan :namaParameter (misal :id). Nilai sesungguhnya bisa diambil dengan hook useParams().
Contoh:
/post/:idcocok dengan/post/5→id = "5"/user/:userId/post/:postIdcocok dengan/user/3/post/10→userId = "3",postId = "10"
⚠️ Hal Penting
- Pastikan dependency array di useEffect berisi parameter (
[id]) agar data diambil ulang saat parameter berubah. - Selalu tangani loading dan error di halaman detail juga.
- Gunakan
try/catchuntuk menangani error async/await.
🧪 Latihan: Daftar Pengguna dan Detail
Coba buat fitur serupa untuk data pengguna dari https://jsonplaceholder.typicode.com/users:
- Halaman
UserListmenampilkan daftar nama (link ke detail). - Halaman
UserDetaildengan parameter/user/:idmenampilkan nama, email, alamat, perusahaan, dll. - Tambahkan link di menu untuk navigasi ke daftar pengguna.
LoadingSpinner terpisah agar tidak menulis kode spinner berulang-ulang. Atau gunakan skeleton seperti di artikel sebelumnya.
🚀 Kesimpulan
- Parameter URL memungkinkan kita membuat halaman dinamis berdasarkan ID atau slug.
- useParams() adalah hook untuk mengambil nilai parameter.
- Kita bisa mengambil data dari API berdasarkan parameter tersebut di dalam useEffect.
- Pola daftar-detail sangat umum dan bisa diterapkan untuk berbagai jenis data (postingan, produk, pengguna, dll).
Di artikel selanjutnya kita akan belajar tentang styling di React (CSS modules, styled components, atau Tailwind). Sampai jumpa!