CodeBlanks Logo Icon CodeBlanks

Bağımlılık kontrolü

useMemo'nun ne zaman yeniden hesapladığını öğrenirsin.

Bağımlılık kontrolü

useMemo'nun bağımlılık dizisi neyin değişeceğini söyler. [items, query] dizi öğelerinden herhangi biri değişirse, React fonksiyonu yeniden çağırır.

Değişmezlik (immutability) şarttır: eğer items.push(newItem) ile diziye eleman eklersen, React diziyi değişmiş saymaz (aynı referans). Bunun yerine setItems(prev => [...prev, newItem]) ile yeni dizi oluşturulur.

Bu yüzden React'te state hep yeni nesnelerle güncellenir. Eski nesneyi mutasyona uğratmak hem React'in değişimi kaçırmasına hem de bazı hook'ların yanlış davranmasına yol açar.

Nesne referansı

JavaScript'te nesneler referans ile karşılaştırılır. [1,2] === [1,2] yanlışdır; iki ayrı dizi farklı nesnedir. Ama const a = [1,2]; a === a doğrudur; aynı nesne.

React bu karşılaştırmayı kullanır: bağımlılık dizisindeki bir değer önceki ile aynı referans mı, değil mi? Aynıysa önbellek kullanılır; farklıysa hesap yeniden yapılır.

Bu yüzden state'i güncellerken hep yeni nesne oluşturulur. setUser({ '{ ...user, name: "Ayşe" }' }) yeni bir nesne yapar; React değişimi algılar. user.name = "Ayşe" yapmaz.

Uygulama useMemo ile sıralama

Aşağıdaki iskeleti tamamla. SortedNames bileşeni yaz. ({ '{ names }' }) alsın. sorted'u useMemo(() => [...names].sort(), [names]) ile hesapla. <ul> içinde sorted.map((n, i) => <li key={ '{ i }' }>{ '{ n }' }</li>) çiz. Dışa aktar.

Başlangıç kodu

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

// SortedNames bileşenini buraya yaz

Örnek çözüm

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

function SortedNames({ names }) {
  const sorted = useMemo(() => [...names].sort(), [names]);
  return (
    <ul>
      {sorted.map((n, i) => (
        <li key={i}>{n}</li>
      ))}
    </ul>
  );
}

export default SortedNames;

Soru ve cevaplar

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

1 useMemo ne zaman yeniden hesaplar?

  • Her render'da
  • useEffect'te
  • Bağımlılık değiştiğinde Doğru cevap
  • Hiçbir zaman

Açıklama: Yalnızca bağımlılık değişince.

2 Mutasyon

Soru
Diziye push ile eleman eklemek ____ olarak adlandırılır ve React tarafından fark edilmez.
Cevap
Diziye push ile eleman eklemek mutasyon olarak adlandırılır ve React tarafından fark edilmez.

Açıklama: push ile ekleme mutasyondur.

3 Bağımlılık kontrolünü eşleştir

Kavram Anlamı
[items, query] bağımlılık
aynı referans önbellek
yeni referans yeniden
push mutasyon

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