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
| useDeferredValue | Debounce | |
|---|---|---|
| Sabit bekleme | Yok, cihaz hızlıysa hemen günceller | Var (ör. 300 ms) |
| Render kesilebilir mi? | Evet | Hayır |
| Ağ isteğini azaltır mı? | Hayır | Evet |
| Amaç | Pahalı render'ı ertelemek | Olay/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).
useTransitionbenzer işi yapar ama state güncellemesini siz sararsınız;useDeferredValueise değeri kontrol etmediğiniz durumlarda (prop olarak gelen değer) kullanışlıdır.
İlgili React soruları
- Virtual DOM nedir ve reconciliation nasıl çalışır?
- Listelerde key prop neden önemlidir? Index kullanmak neden sorunludur?
- Controlled ve uncontrolled component farkı nedir?
- useEffect bağımlılık dizisi nasıl çalışır?
- useMemo ile useCallback arasındaki fark nedir?
- Gereksiz render'ları nasıl tespit eder ve önlersiniz?
Bu konuda başka bir soru biliyor musun?
Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.