0Pricing
React Academy · Pelajaran

useDeferredValue untuk Penundaan Input

Tunda render ulang bagian UI yang lambat sambil menjaga input tetap responsif.

useDeferredValue untuk Penundaan Input 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.

Selamat Datang

Dalam pelajaran ini Anda akan menggunakan useDeferredValue untuk menunda perenderan ulang bagian antarmuka yang mahal, sambil menjaga masukan yang dikendalikan tetap sigap dan responsif.

Apa Itu useDeferredValue?

useDeferredValue menerima suatu nilai dan mengembalikan versinya yang ditunda. Nilai yang ditunda tertinggal dari nilai saat ini selama perenderan mendesak, sehingga React dapat memperbarui antarmuka dalam dua langkah: cepat untuk masukan, ditunda untuk keluaran yang mahal.
const [query, setQuery] = useState('');
const deferredQuery = useDeferredValue(query);
// query updates immediately on keystroke
// deferredQuery updates when React has capacity

Menerapkannya pada Komponen Mahal

Teruskan nilai yang ditunda, bukan nilai langsung, ke komponen mahal. Komponen mahal hanya dirender ulang saat deferredQuery berubah — nilainya tertinggal dari masukan saat pengguna mengetik dengan cepat.
function App() {
  const [q, setQ] = useState('');
  const dq = useDeferredValue(q);
  return (
    <>
      <input value={q} onChange={e => setQ(e.target.value)} />
      <HeavyList query={dq} /> {/* renders with deferred value */}
    </>
  );
}

Menampilkan Penanda Konten Usang

Bandingkan nilai langsung dengan nilai yang ditunda. Jika keduanya berbeda, konten tersebut sudah usang dan Anda dapat meredupkannya dengan opasitas atau menampilkan indikator pemuatan.
const isStale = q !== dq;
<div style={{ opacity: isStale ? 0.5 : 1 }}>
  <HeavyList query={dq} />
</div>

useDeferredValue vs Penundaan Berbasis Waktu

Penundaan berbasis `setTimeout` selalu menambahkan jeda tetap, misalnya 300 md, bahkan pada perangkat cepat. useDeferredValue bersifat adaptif — pada perangkat cepat, perenderan berlangsung segera; pada perangkat lambat, proses ditunda untuk mencegah tersendat.

useDeferredValue vs useTransition

Gunakan useTransition saat Anda OWN pengatur status, sehingga Anda dapat membungkus setState. Gunakan useDeferredValue saat Anda menerima nilai sebagai properti atau dari konteks dan tidak dapat mengendalikan kapan nilai tersebut diperbarui.
// You own the state: use useTransition
startTransition(() => setTab(newTab));

// You receive the value: use useDeferredValue
const deferredProp = useDeferredValue(props.searchQuery);

Menggabungkan dengan React.memo

Agar useDeferredValue dapat melewati perenderan ulang secara efektif, komponen mahal harus dibungkus dalam React.memo. Tanpanya, komponen akan dirender ulang setiap kali komponen induk dirender ulang, terlepas dari nilai yang ditunda.
const HeavyList = React.memo(function({ query }) {
  // expensive rendering
  return <ul>{data.filter(q => ...).map(...)}</ul>;
});

Nilai Tertunda pada Perenderan Awal

Pada perenderan awal, nilai yang ditunda sama dengan nilai saat ini — tidak ada penundaan. Penundaan hanya berlaku ketika nilai saat ini dan nilai yang ditunda berbeda selama perenderan ulang.

Beberapa Nilai Tertunda

Anda dapat memanggil useDeferredValue beberapa kali untuk bagian antarmuka mahal yang berbeda, dan setiap bagian ditunda secara terpisah.
const deferredA = useDeferredValue(valueA);
const deferredB = useDeferredValue(valueB);

Keterbatasan

useDeferredValue tidak membuat perenderan lebih cepat — hanya menundanya. Jika perenderan mahal memerlukan 500 md, antarmuka tetap akan tersendat. Gabungkan dengan virtualisasi (react-virtual) untuk daftar yang benar-benar besar.

Pemeriksaan Singkat

Kapan useDeferredValue memberikan manfaat dibandingkan nilai biasa?

Rangkuman

useDeferredValue mengembalikan versi nilai yang tertinggal. Teruskan nilai tersebut ke komponen mahal yang dibungkus React.memo. Tampilkan penanda konten usang saat deferredValue !== value. Utamakan ini dibandingkan penundaan berbasis waktu tetap untuk kinerja adaptif.

Berikutnya

Pelajaran berikutnya: **Suspense untuk Batas Data dan Kode** — Anda akan menggabungkan Suspense dengan pemuatan lambat dan pustaka data untuk menghasilkan status pemuatan yang bersih.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “useDeferredValue untuk Penundaan Input” gratis?

Ya — teks lengkap “useDeferredValue untuk Penundaan Input” 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 “useDeferredValue untuk Penundaan Input”?

Tunda render ulang bagian UI yang lambat sambil menjaga input tetap responsif. 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 “useDeferredValue untuk Penundaan Input” 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. Kondisi Balapan & Pembersihan Effect
  2. useTransition untuk Pembaruan UI Non-Pemblokiran
  3. useDeferredValue untuk Penundaan Input
  4. Suspense untuk Batas Data & Kode
← Kembali ke React Academy