ReactJS #10: useEffect
Melakukan Sesuatu Begitu Komponen Dimuat
(Seperti Menjemput Teman setelah Sekolah)
Halo, petualang React! 🌟
Pernahkah kamu pulang sekolah dan dijemput orang tua? Kamu menunggu di depan gerbang, lalu begitu melihat mobil jemputan, kamu langsung masuk dan pulang. Di React, kita juga sering perlu melakukan sesuatu setelah komponen "muncul" di layar, misalnya mengambil data dari internet, mengubah judul halaman, atau memulai timer. Untuk itu, kita punya alat bernama useEffect.
useEffect = "menjemput" setelah komponen selesai render
🔎 Apa Itu useEffect?
useEffect adalah Hook yang memungkinkan kita menjalankan efek samping (side effects) pada komponen. Efek samping adalah hal-hal yang tidak berhubungan langsung dengan tampilan, seperti:
- Mengambil data dari API (web service).
- Mengubah judul halaman (title).
- Menyetel timer atau interval.
- Menyimpan data ke penyimpanan lokal.
useEffect dijalankan setelah komponen selesai di-render ke layar. Jadi, seperti "penjemput" yang datang setelah sekolah usai.
📜 Sintaks useEffect
Berikut cara menulis useEffect:
Penjelasan:
- Parameter pertama: fungsi yang berisi efek kita.
- Parameter kedua: array dependencies. Efek akan dijalankan ulang jika salah satu nilai di dalam array berubah.
- Fungsi pembersih (opsional): jika efek memerlukan pembersihan (misalnya membersihkan timer), kita bisa mengembalikan fungsi dari dalam useEffect.
🧪 Contoh 1: Menjalankan Efek Sekali Saat Komponen Dimuat
Kita ingin mengambil data dari API palsu (JSONPlaceholder) begitu komponen muncul. Untuk menjalankan efek hanya sekali, kita beri array dependencies kosong [].
Penjelasan:
- Kita punya state
postsuntuk menyimpan data, danloadinguntuk menampilkan teks "Memuat...". - Di dalam useEffect, kita melakukan fetch ke API. Setelah data datang, kita update state.
- Array kosong
[]memastikan efek hanya berjalan sekali saat komponen pertama kali dimuat.
🔄 Contoh 2: Efek yang Berjalan Ulang Saat State Berubah
Kadang kita ingin efek dijalankan ulang setiap kali nilai tertentu berubah. Misalnya, kita ingin mengubah judul halaman sesuai dengan jumlah klik pada counter.
Sekarang, setiap kali tombol diklik dan count berubah, judul tab browser akan ikut berubah. Coba lihat di tab browser, judulnya akan berganti!
🧹 Contoh 3: Membersihkan Efek (Cleanup)
Beberapa efek perlu dibersihkan agar tidak membocorkan memori. Contoh: timer (setInterval) atau langganan (subscription). Kita bisa mengembalikan fungsi dari useEffect untuk membersihkan.
Penjelasan:
- Kita membuat interval yang menambah detik setiap 1000ms.
- Fungsi yang dikembalikan akan dijalankan saat komponen dihapus dari layar (misal pindah halaman), membersihkan interval agar tidak terus berjalan di latar belakang.
- Dengan array kosong, efek hanya berjalan sekali, tapi cleanup tetap dipanggil saat komponen tidak lagi digunakan.
⚠️ Hati-hati dengan Infinite Loop!
Jika kita lupa memberi array dependencies, atau memberi dependencies yang selalu berubah, efek bisa dijalankan terus-menerus. Contoh salah:
Jika tidak ada array, useEffect dijalankan setiap render. Di dalamnya kita mengubah state, yang memicu render ulang, dan seterusnya. Ini akan membuat browser hang. Selalu perhatikan dependencies.
🧪 Latihan: Aplikasi Kutipan Acak
Buat komponen KutipanAcak yang:
- Saat pertama dimuat, menampilkan kutipan acak dari API
https://api.quotable.io/random. - Ada tombol "Kutipan Lainnya" yang ketika diklik akan mengambil kutipan baru dari API yang sama (tanpa reload halaman).
- Tampilkan status loading saat mengambil data.
Kerangka kode (coba isi sendiri):
Penjelasan: useEffect memanggil ambilKutipan saat komponen dimuat. Tombol juga memanggil fungsi yang sama untuk mengambil kutipan baru. Jangan lupa set loading agar tombol tidak diklik ganda.
🚀 Kesimpulan
- useEffect digunakan untuk menjalankan efek samping setelah komponen dirender.
- Array dependencies mengontrol kapan efek dijalankan ulang.
- Kosong
[]= sekali saat mount. - Berisi state/props = dijalankan ulang jika nilai berubah.
- Tanpa array = dijalankan setiap render (hati-hati infinite loop).
- Kembalikan fungsi dari useEffect untuk membersihkan efek (seperti menghapus timer).
Di artikel selanjutnya kita akan langsung mengambil data dari API (web service) dan menampilkannya dengan gaya yang lebih keren. Sampai jumpa!