useDeferredValue nedir? Arama filtresinde debounce yerine ne zaman tercih edilir?

Cevap

useDeferredValue(value), bir değerin geride kalan bir kopyasını döndürür. React önce acil güncellemeyi (input'a yazılan harf) render eder, ardından deferred değerle pahalı render'ı düşük öncelikle ve kesilebilir (interruptible) şekilde yapar. Yeni bir tuşa basılırsa yarım kalan render atılır.

function SearchPage({ items }) {
  const [query, setQuery] = useState("");
  const deferredQuery = useDeferredValue(query);
  const isStale = query !== deferredQuery;

  return (
    <>
      <input value={query} onChange={(e) => setQuery(e.target.value)} />
      <div style={{ opacity: isStale ? 0.6 : 1 }}>
        <SlowList items={items} query={deferredQuery} />
      </div>
    </>
  );
}

const SlowList = memo(function SlowList({ items, query }) {
  const filtered = items.filter((i) => i.name.toLowerCase().includes(query.toLowerCase()));
  return filtered.map((i) => <Row key={i.id} item={i} />);
});

SlowList'in memo ile sarılması önemlidir; aksi hâlde acil render'da da yeniden çizilir ve kazanç kalmaz (React Compiler bunu otomatik yapabilir).

Debounce ile karşılaştırma

useDeferredValueDebounce
Sabit beklemeYok, cihaz hızlıysa hemen güncellerVar (ör. 300 ms)
Render kesilebilir mi?EvetHayır
Ağ isteğini azaltır mı?HayırEvet
AmaçPahalı render'ı ertelemekOlay/istek sayısını azaltmak

Ne zaman hangisi?

  • Veri zaten client'ta ve sorun ağır render ise: useDeferredValue.
  • Her tuş vuruşunda API isteği atılıyorsa: debounce (veya ikisi birlikte).
  • useTransition benzer işi yapar ama state güncellemesini siz sararsınız; useDeferredValue ise değeri kontrol etmediğiniz durumlarda (prop olarak gelen değer) kullanışlıdır.
  1. Virtual DOM nedir ve reconciliation nasıl çalışır?KolayReactFrontend
  2. Listelerde key prop neden önemlidir? Index kullanmak neden sorunludur?KolayReactFrontend
  3. Controlled ve uncontrolled component farkı nedir?KolayReactFrontend
  4. useEffect bağımlılık dizisi nasıl çalışır?OrtaReactFrontend
  5. useMemo ile useCallback arasındaki fark nedir?OrtaReactFrontend
  6. Gereksiz render'ları nasıl tespit eder ve önlersiniz?ZorReactFrontend

Bu konuda başka bir soru biliyor musun?

Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.

Soru ekle