0Pricing
React Academy · Ders

Girdi Sıklığını Azaltmak için useDeferredValue

Girdinin hızlı yanıt vermesini korurken arayüzün yavaş bölümlerinin yeniden oluşturulmasını geciktirin.

Girdi Sıklığını Azaltmak için useDeferredValue, CoddyKit'te ücretsiz bir React Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, React Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. React Academy kursu toplamda 4 dersten oluşur.

Hoş Geldiniz

Bu derste, denetimli girdileri hızlı ve duyarlı tutarken arayüzün pahalı bölümlerinin yeniden oluşturulmasını geciktirmek için useDeferredValue kullanacaksınız.

useDeferredValue Nedir?

useDeferredValue bir değer kabul eder ve bu değerin ertelenmiş bir sürümünü döndürür. Acil oluşturma işlemleri sırasında ertelenmiş değer mevcut değerin gerisinde kalır; böylece React arayüzü iki adımda güncelleyebilir: girdi için hızlı, pahalı çıktı için ertelenmiş.
const [query, setQuery] = useState('');
const deferredQuery = useDeferredValue(query);
// query updates immediately on keystroke
// deferredQuery updates when React has capacity

Pahalı Bileşenlere Uygulama

Pahalı bileşene güncel değeri değil, ertelenmiş değeri aktarın. Pahalı bileşen yalnızca ertelenmiş sorgu değiştiğinde yeniden oluşturulur; bu değer hızlı yazma sırasında girdinin gerisinde kalır.
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 */}
    </>
  );
}

Güncelliğini Yitirmiş İçerik Göstergesi Gösterme

Güncel değeri ertelenmiş değerle karşılaştırın. Aralarında fark olduğunda içerik güncelliğini yitirmiştir; bu durumda opaklığı azaltabilir veya bir yükleme simgesi gösterebilirsiniz.
const isStale = q !== dq;
<div style={{ opacity: isStale ? 0.5 : 1 }}>
  <HeavyList query={dq} />
</div>

useDeferredValue ve Gecikmeli İşleme Karşılaştırması

setTimeout tabanlı gecikmeli işleme, hızlı makinelerde bile her zaman sabit bir gecikme (örneğin 300 ms) ekler. useDeferredValue uyarlanabilirdir; hızlı cihazlarda hemen oluşturur, yavaş cihazlarda ise takılmaları önlemek için erteler.

useDeferredValue ve useTransition Karşılaştırması

Durum ayarlayıcısının sahibi sizseniz (setState'i sarmalayabiliyorsanız) useTransition kullanın. Bir değeri özellik olarak veya bir bağlamdan alıyor ve güncellendiği zamanı denetleyemiyorsanız useDeferredValue kullanın.
// You own the state: use useTransition
startTransition(() => setTab(newTab));

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

React.memo ile Birleştirme

useDeferredValue'ın yeniden oluşturmaları etkili biçimde atlayabilmesi için pahalı bileşenin React.memo ile sarılmış olması gerekir. Aksi takdirde bileşen, ertelenmiş değerden bağımsız olarak üst bileşen her yeniden oluşturulduğunda yeniden oluşturulur.
const HeavyList = React.memo(function({ query }) {
  // expensive rendering
  return <ul>{data.filter(q => ...).map(...)}</ul>;
});

İlk Oluşturmada Ertelenmiş Değer

İlk oluşturmada ertelenmiş değer güncel değere eşittir; gecikme yoktur. Erteleme yalnızca yeniden oluşturma sırasında güncel ve ertelenmiş değerlerin ikisi farklı olduğunda devreye girer.

Birden Çok Ertelenmiş Değer

Arayüzün farklı pahalı bölümleri için useDeferredValue'ı birden çok kez çağırabilirsiniz; her değer bağımsız olarak ertelenir.
const deferredA = useDeferredValue(valueA);
const deferredB = useDeferredValue(valueB);

Sınırlamalar

useDeferredValue oluşturmayı hızlandırmaz; yalnızca geciktirir. Pahalı oluşturma 500 ms sürüyorsa arayüz yine takılacaktır. Gerçekten büyük listeler için bunu sanallaştırma (react-virtual) ile birlikte kullanın.

Kısa Kontrol

useDeferredValue normal bir değere kıyasla ne zaman fayda sağlar?

Özet

useDeferredValue, bir değerin geriden gelen sürümünü döndürür. Bu değeri pahalı ve React.memo ile sarılmış bileşenlere aktarın. deferredValue !== value olduğunda güncelliğini yitirmiş içerik göstergesi gösterin. Uyarlanabilir performans için sabit gecikmeli işleme yerine bunu tercih edin.

Sırada

Sıradaki ders: **Veri ve Kod Sınırları için Suspense** — düzenli yükleme durumları oluşturmak için Suspense'i lazy yükleme ve veri kitaplıklarıyla birleştireceksiniz.

Sıkça Sorulan Sorular

“Girdi Sıklığını Azaltmak için useDeferredValue” dersi ücretsiz mi?

Evet — “Girdi Sıklığını Azaltmak için useDeferredValue” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve React Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. React Academy kursu toplamda 4 dersten oluşur.

“Girdi Sıklığını Azaltmak için useDeferredValue” dersinde ne öğreneceğim?

Girdinin hızlı yanıt vermesini korurken arayüzün yavaş bölümlerinin yeniden oluşturulmasını geciktirin. React Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

React Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te React Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.

“Girdi Sıklığını Azaltmak için useDeferredValue” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu React Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her React Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Yarış Koşulları ve Effect Temizleme
  2. Engellemeyen Arayüz Güncellemeleri için useTransition
  3. Girdi Sıklığını Azaltmak için useDeferredValue
  4. Veri ve Kod Sınırları için Suspense
← React Academy Sayfasına Dön