React Academy · Pelajaran

useDeferredValue untuk Nyahlantun Input

Tangguhkan pemaparan semula bahagian antara muka yang perlahan sambil mengekalkan tindak balas input.

Pelajaran 3 daripada 413 langkah

useDeferredValue untuk Nyahlantun Input ialah pelajaran React Academy percuma di CoddyKit. Ini ialah pelajaran 3 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran React Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus React Academy merangkumi sejumlah 4 pelajaran.

Selamat Datang

Dalam pelajaran ini, anda akan menggunakan useDeferredValue untuk menangguhkan pemaparan semula bahagian UI yang mahal sambil memastikan masukan terkawal kekal pantas dan responsif.

Apakah useDeferredValue?

useDeferredValue menerima nilai dan mengembalikan versi tertangguh nilai itu. Nilai tertangguh ketinggalan daripada nilai semasa ketika pemaparan mendesak, lalu membolehkan React mengemas kini UI dalam dua langkah: pantas untuk masukan dan tertangguh untuk keluaran yang mahal.
const [query, setQuery] = useState('');
const deferredQuery = useDeferredValue(query);
// query updates immediately on keystroke
// deferredQuery updates when React has capacity

Menggunakan pada Komponen Mahal

Hantarkan nilai tertangguh, bukan nilai langsung, kepada komponen mahal. Komponen mahal hanya dipaparkan semula apabila deferredQuery berubah — yang ketinggalan daripada masukan ketika penaipan pantas.
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 */}
    </>
  );
}

Memaparkan Penunjuk Kandungan Lama

Bandingkan nilai langsung dengan nilai tertangguh. Apabila kedua-duanya berbeza, kandungan itu sudah lama dan anda boleh memudarkannya menggunakan kelegapan atau memaparkan pemutar pemuatan.
const isStale = q !== dq;
<div style={{ opacity: isStale ? 0.5 : 1 }}>
  <HeavyList query={dq} />
</div>

useDeferredValue berbanding Penyahgoyangan

Penyahgoyangan berasaskan setTimeout sentiasa memperkenalkan kelewatan tetap, contohnya 300ms, walaupun pada mesin pantas. useDeferredValue bersifat adaptif — pada peranti pantas, kandungan dipaparkan serta-merta; pada peranti perlahan, kandungan ditangguhkan untuk mengelakkan kegagapan.

useDeferredValue berbanding useTransition

Gunakan useTransition apabila anda OWN penetap keadaan, iaitu anda boleh membalut setState. Gunakan useDeferredValue apabila anda menerima nilai sebagai sifat atau daripada konteks dan tidak dapat mengawal masa kemas kini nilai itu.
// 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 melangkau pemaparan semula dengan berkesan, komponen mahal mestilah dibalut dalam React.memo. Tanpanya, komponen akan dipaparkan semula setiap kali komponen induk dipaparkan semula, tanpa mengira nilai tertangguh.
const HeavyList = React.memo(function({ query }) {
  // expensive rendering
  return <ul>{data.filter(q => ...).map(...)}</ul>;
});

Nilai Tertangguh pada Pemaparan Awal

Pada pemaparan awal, nilai tertangguh sama dengan nilai semasa — tiada kelewatan. Penangguhan hanya bermula apabila nilai semasa dan nilai tertangguh berbeza semasa pemaparan semula.

Pelbagai Nilai Tertangguh

Anda boleh memanggil useDeferredValue beberapa kali untuk bahagian UI mahal yang berbeza; setiap satunya akan ditangguhkan secara berasingan.
const deferredA = useDeferredValue(valueA);
const deferredB = useDeferredValue(valueB);

Batasan

useDeferredValue tidak menjadikan pemaparan lebih pantas — ia hanya menangguhkannya. Jika pemaparan mahal mengambil masa 500ms, UI masih akan gagap. Gabungkannya dengan virtualisasi (react-virtual) untuk senarai yang benar-benar besar.

Semakan Pantas

Bilakah useDeferredValue memberikan manfaat berbanding nilai biasa?

Imbas Kembali

useDeferredValue mengembalikan versi nilai yang ketinggalan. Hantarkannya kepada komponen mahal yang dibalut React.memo. Paparkan penunjuk kandungan lama apabila deferredValue !== value. Utamakan kaedah ini berbanding penyahgoyangan dengan kelewatan tetap untuk prestasi adaptif.

Seterusnya

Pelajaran seterusnya: **Suspense untuk Sempadan Data & Kod** — anda akan menggabungkan Suspense dengan pemuatan mengikut keperluan dan pustaka data untuk keadaan pemuatan yang kemas.
Percuma untuk bermula

Pelajari React dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
88
Pelajaran
324

Soalan Lazim

Adakah pelajaran “useDeferredValue untuk Nyahlantun Input” percuma?

Ya — teks penuh “useDeferredValue untuk Nyahlantun Input” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus React Academy, tingkat taraf kepada CoddyKit PRO. Kursus React Academy merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “useDeferredValue untuk Nyahlantun Input”?

Tangguhkan pemaparan semula bahagian antara muka yang perlahan sambil mengekalkan tindak balas input. Anda berlatih React Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan React Academy?

Tiada pengalaman terdahulu diperlukan. Pembelajaran React Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 3 daripada 4.

Berapa lamakah pelajaran “useDeferredValue untuk Nyahlantun Input” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran React Academy ini?

Ya. Setiap pelajaran React Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Keadaan Perlumbaan & Pembersihan Kesan
  2. useTransition untuk Kemas Kini Antara Muka Tidak Menyekat
  3. useDeferredValue untuk Nyahlantun Input
  4. Suspense untuk Sempadan Data & Kod
← Kembali ke React Academy