CodeBlanks Logo Icon CodeBlanks

useMemo nedir?

useMemo ile pahalı bir hesabı önbelleğe almayı öğrenirsin.

useMemo nedir?

useMemo, pahalı bir hesabı yalnızca bağımlılıklar değiştiğinde yeniden yapan bir kancadır. const value = useMemo(() => compute(a, b), [a, b]); biçiminde kullanılır.

Her render'da React, compute fonksiyonunu çağırmak yerine önbelleğe alınmış değeri döndürür. Yalnızca a ya da b değiştiğinde fonksiyon tekrar çalışır. Bu, özellikle büyük listelerin filtrelenmesi ya da karmaşık hesaplar için hız artışı sağlar.

İki uyarı: önbellek bellek tutar; küçük hesapları sarmak daha yavaş olabilir. Ayrıca useMemo'yu bırakıp React'in kendi hızına güvenmek de çoğu zaman iyidir. Yalnızca gerçekten yavaş bir hesap varsa kullan.

Pahalı hesap örneği

Bir listede 1000 öğe var ve kullanıcı bir arama metni giriyor. Her render'da items.filter(i => i.name.includes(query)) çağrılırsa, 1000 satır her seferinde taranır.

useMemo(() => items.filter(i => i.name.includes(query)), [items, query]) ile yalnızca items ya da query değiştiğinde filtreleme yapılır. Diğer render'larda önbellekten okunur.

Bu, büyük listelerde ciddi hız artışı sağlar. Ama küçük listelerde (<50 öğe) fark edilmez; ek yük bile getirebilir. useMemo'yu profil ile doğrulamadan eklemek iyi bir alışkanlık değildir.

Uygulama useMemo ile filtre

Aşağıdaki iskeleti tamamla. SearchList bileşeni yaz. ({ '{ items, query }' }) alsın. visible'ı useMemo(() => items.filter(i => i.name.includes(query)), [items, query]) ile hesapla. <ul> içinde visible.map(i => <li key={ '{ i.id }' }>{ '{ i.name }' }</li>) çiz. Dışa aktar.

Başlangıç kodu

App.jsx
import { useMemo } from "react";

// SearchList bileşenini buraya yaz

Örnek çözüm

App.jsx
import { useMemo } from "react";

function SearchList({ items, query }) {
  const visible = useMemo(() => items.filter((i) => i.name.includes(query)), [items, query]);
  return (
    <ul>
      {visible.map((i) => (
        <li key={i.id}>{i.name}</li>
      ))}
    </ul>
  );
}

export default SearchList;

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 useMemo ne zaman kullanılır?

  • Her render'da yeniden hesap için
  • Pahalı hesapta önbellek için Doğru cevap
  • useEffect yerine
  • DOM güncellemek için

Açıklama: Pahalı hesapları önbelleğe almak için.

2 Bağımlılık

Soru
useMemo'nun ikinci parametresi ____ dizisidir.
Cevap
useMemo'nun ikinci parametresi bağımlılık dizisidir.

Açıklama: İkinci parametre bağımlılık dizisidir.

3 useMemo adımlarını eşleştir

Kavram Anlamı
compute Hesap
deps Bağımlılık
cache Önbellek
recompute Yeniden

Orta seviye bölümündeki tüm dersler