0Pricing
React Academy · Pelajaran

Mengimplementasikan Hook Kustom useThrottle

Buat hook useThrottle yang membatasi frekuensi pembaruan nilai selama peristiwa cepat seperti pengguliran.

Mengimplementasikan Hook Kustom useThrottle adalah pelajaran React Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar React Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus React Academy mencakup 4 pelajaran total.

Pembatasan Laju Lebih Sulit daripada Penundaan

Penundaan cukup mengatur ulang pengatur waktu pada setiap peristiwa. Pembatasan laju harus secara aktif melacak kapan eksekusi terakhir terjadi dan memutuskan apakah waktu yang cukup telah berlalu untuk eksekusi berikutnya. Hal ini memerlukan penyimpanan cap waktu di antara perenderan, sehingga implementasinya sedikit lebih rumit daripada penundaan.

Menggunakan useRef untuk lastRunTime

Cap waktu eksekusi terakhir harus dipertahankan di antara perenderan tanpa memicu perenderan ulang, sehingga useRef merupakan alat yang tepat. Simpan cap waktu sebagai const lastRunTime = useRef(Date.now()). Berbeda dari status, memperbarui referensi tidak menyebabkan perenderan ulang, sehingga logika pembatasan laju berjalan secara efisien tanpa siklus tambahan.

Tanda Tangan Pengait

Pengait useThrottle(value, delay) mengembalikan versi nilai masukan yang dibatasi lajunya. Kontraknya mirip dengan useDebounce: menerima nilai apa pun dan jeda dalam milidetik, lalu mengembalikan nilai yang dibatasi lajunya. Komponen menggunakannya dengan cara yang sama, sehingga pengait ini menjadi alternatif pengganti langsung untuk perilaku waktu yang berbeda.

Implementasi Ujung Akhir

Pembatas laju pada ujung akhir memperbarui nilai pada akhir setiap selang waktu. Saat nilai baru tiba, jadwalkan setTimeout untuk sisa waktu selang: delay - (Date.now() - lastRunTime.current). Saat pewaktu berjalan, perbarui status dan catat lastRunTime yang baru. Batalkan pewaktu sebelumnya dalam pembersihan.

Implementasi Ujung Awal

Pembatas laju pada ujung awal menerapkan nilai pertama segera dan mengabaikan nilai berikutnya hingga selang waktu berakhir. Periksa: jika Date.now() - lastRunTime.current >= delay, perbarui status dan catat waktunya. Jika tidak, lewati pembaruan. Ini memberikan umpan balik seketika pada tindakan pertama, diikuti masa jeda.

Menggabungkan Ujung Awal dan Ujung Akhir

Pengalaman pengguna terbaik sering menggabungkan keduanya: merespons segera peristiwa pertama (ujung awal), lalu memastikan status akhir juga diterapkan setelah selang waktu (ujung akhir). Dengan begitu, pengguna melihat respons awal yang cepat dan nilai akhir selalu diterapkan setelah gerakan berhenti, sehingga mencegah status akhir yang usang.

Menggunakan useRef untuk ID Pewaktu

Simpan ID pewaktu yang tertunda di dalam useRef: const timeoutRef = useRef(null). Sebelum menjadwalkan pewaktu baru, panggil clearTimeout(timeoutRef.current) untuk membatalkan pewaktu yang sudah ada. Ini mencegah beberapa pewaktu yang saling tumpang tindih, yang akan menyebabkan beberapa pembaruan dalam satu selang pembatasan laju.

Pembersihan Saat Dilepas

Pembersihan useEffect harus memanggil clearTimeout(timeoutRef.current) untuk membatalkan pembaruan ujung akhir yang tertunda saat komponen dilepas. Tanpa ini, pewaktu tertunda berjalan setelah komponen dilepas, berusaha mengatur status pada komponen yang sudah dilepas dan berpotensi menyebabkan peringatan React.

Alternatif Panggilan Balik dengan Pembatasan Laju

Alih-alih kait berbasis nilai, Anda dapat membuat kait pembatas laju berbasis useCallback: useThrottledCallback(fn, delay) mengembalikan versi fungsi yang dibatasi lajunya. Ini lebih fleksibel ketika operasi yang ingin Anda batasi adalah pemanggilan fungsi, seperti pelacak analitik, bukan nilai reaktif.

Menguji Pembatasan Laju dengan Pewaktu Palsu

Dalam pengujian Jest, gunakan jest.useFakeTimers() untuk mengontrol waktu. Siapkan pembatas laju dengan penundaan 1000 ms, jalankan 10 perubahan nilai secara cepat, lalu majukan waktu palsu 500 ms dan periksa bahwa hanya 1 atau 2 pembaruan yang terjadi. Majukan lagi 500 ms dan verifikasi bahwa pembaruan ujung akhir berjalan. Ini memvalidasi perilaku pembatas laju secara deterministik.

Pembatasan Laju dalam Model React

React memproses pembaruan status secara berkelompok selama perenderan. Pembatas laju yang bekerja pada pembaruan status berfungsi baik dalam model ini. Namun, perhatikan bahwa dalam Mode Konkuren React 18, perenderan dapat disela. Logika pembatas laju itu sendiri, yang berdasarkan waktu nyata menurut jam dinding melalui Date.now(), tidak terpengaruh oleh penjadwalan React.

Pembatasan Laju Ujung Akhir vs Ujung Awal

Pada ujung mana pembatas laju "ujung akhir" dijalankan?

Rekap Pelajaran: Kait useThrottle

Pembatasan laju memerlukan pelacakan waktu eksekusi terakhir dengan useRef. Kait dapat menerapkan ujung awal (segera), ujung akhir (ditunda), atau keduanya. Selalu simpan ID pewaktu dalam referensi dan batalkan dalam pembersihan. Untuk kasus penggunaan berbasis fungsi, pilih pola useThrottledCallback. Gunakan pengujian dengan pewaktu palsu agar andal.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Mengimplementasikan Hook Kustom useThrottle” gratis?

Ya — teks lengkap “Mengimplementasikan Hook Kustom useThrottle” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus React Academy, upgrade ke CoddyKit PRO. Kursus React Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Mengimplementasikan Hook Kustom useThrottle”?

Buat hook useThrottle yang membatasi frekuensi pembaruan nilai selama peristiwa cepat seperti pengguliran. Kamu berlatih React Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai React Academy?

Tidak diperlukan pengalaman sebelumnya. React Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.

Berapa lama pelajaran “Mengimplementasikan Hook Kustom useThrottle” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran React Academy ini?

Ya. Setiap pelajaran React Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Mengapa Debounce dan Throttle Penting dalam UI
  2. Mengimplementasikan Hook Kustom useDebounce
  3. Mengimplementasikan Hook Kustom useThrottle
  4. Penerapan Praktis: Pencarian, Gulir, Pengubahan Ukuran
← Kembali ke React Academy