ReactJS #13: Fetch API Part 3
Menangani Loading dan Error
(Sabar Ya, Lagi Ambil Data)
Halo, sobat sabar! 🧘
Pernahkah kamu memesan makanan di restoran? Kamu menunggu beberapa saat sebelum makanan datang. Kadang makanan datang, kadang keliru, kadang kehabisan. Nah, saat aplikasi kita mengambil data dari internet, pengguna juga perlu tahu apa yang terjadi: apakah data sedang diambil, apakah berhasil, atau apakah ada masalah. Di artikel ini, kita akan belajar membuat pengalaman menunggu yang menyenangkan dan menangani error dengan ramah.
Seperti menunggu makanan: ada loading, ada sukses, ada error
🔄 1. Indikator Loading yang Keren
Sebelumnya kita hanya menampilkan teks "Memuat data...". Itu sudah cukup, tapi kita bisa membuatnya lebih menarik dengan spinner (lingkaran berputar) atau skeleton (kerangka yang berkedip).
⚪ Spinner (Lingkaran Berputar)
Kita buat spinner dengan CSS. Tambahkan kode ini di <style>:
Lalu di komponen, kita bisa menggunakannya:
🦴 Skeleton (Kerangka Berkedip)
Skeleton adalah tiruan tampilan sebelum data muncul. Biasanya berupa kotak abu-abu yang berkedip. Ini memberi kesan bahwa sesuatu akan segera muncul.
Contoh penggunaan untuk menampilkan 4 skeleton card:
❌ 2. Menangani Error dengan Ramah
Koneksi internet bisa putus, server bisa error. Kita harus memberi tahu pengguna dengan cara yang tidak membuat mereka frustrasi. Tambahkan tombol "Coba Lagi" agar mereka bisa mengulang permintaan.
Contoh komponen dengan error handling dan tombol coba lagi:
Penjelasan:
- Kita menggunakan
try/catch/finallyuntuk menangkap error. - Di bagian error, kita tampilkan pesan yang ramah dan tombol untuk mencoba lagi.
- Fungsi
ambilDatabisa dipanggil ulang saat tombol diklik.
try/catch dengan async/await agar kode lebih rapi daripada .then().catch(). Pilih yang paling kamu suka!
🔄 3. Menggabungkan Loading, Error, dan Data
Sekarang kita buat komponen lengkap yang menampilkan data pengguna dalam kartu, dengan spinner saat loading, dan pesan error jika gagal. Kita juga tambahkan tombol "Coba Lagi".
🧪 Latihan: Aplikasi Kutipan dengan Loading dan Error
Buat komponen KutipanHarian yang:
- Mengambil kutipan acak dari
https://api.quotable.io/random. - Menampilkan spinner saat loading.
- Jika error, tampilkan pesan error dan tombol coba lagi.
- Tambahkan tombol "Kutipan Lainnya" untuk mengambil kutipan baru (jangan lupa set loading dan error ulang).
- Nonaktifkan tombol saat loading (gunakan atribut
disabled).
Kerangka (coba selesaikan sendiri):
Jangan lupa untuk menonaktifkan tombol "Kutipan Lainnya" saat loading true agar tidak diklik dua kali.
<button onClick={ambilKutipan} disabled={loading}>🔄 Kutipan Lainnya</button>
🎯 4. Tips Membuat Pengalaman Pengguna yang Baik
- Jangan biarkan pengguna menunggu tanpa informasi. Selalu tampilkan indikator loading.
- Gunakan skeleton untuk data yang sudah diketahui bentuknya. Ini memberi ilusi bahwa sesuatu akan segera muncul.
- Pesan error yang ramah, bukan kode error mentah. "Yah, koneksimu putus nih" lebih baik daripada "Error: NetworkError".
- Berikan tombol "Coba Lagi" untuk memulihkan dari error. Jangan paksa pengguna me-refresh halaman.
- Nonaktifkan tombol aksi saat loading untuk mencegah pengiriman ganda.
🚀 Kesimpulan
- Loading bisa dibuat menarik dengan spinner (lingkaran berputar) atau skeleton (kerangka berkedip).
- Error harus ditampilkan dengan ramah dan memberi kesempatan pengguna untuk mencoba lagi.
- Gunakan
try/catch/finallyuntuk menangani proses async dengan rapi. - State
loadingdanerroradalah sahabat terbaik dalam pengambilan data. - Selalu pikirkan pengalaman pengguna (UX) agar aplikasi kita nyaman dipakai.
Di artikel selanjutnya kita akan membuat Aplikasi Cuaca Sederhana dengan API sungguhan. Kita akan menggabungkan semua yang sudah dipelajari: fetch, loading, error, dan tampilan yang cantik. Sampai jumpa!