CodeBlanks Logo Icon CodeBlanks

Otomatik memoizasyon

useMemo ve useCallback'i elle yazmaya gerek kalmadığını öğrenirsin.

Otomatik memoizasyon

React Compiler olmadan bir geri çağırma (callback) her çizimde yeniden oluşur; alt bileşen memo ile sarılsa bile yeni referans yüzünden yeniden çizilir. useCallback ile bunu elle önlersin.

Derleyici açıkken bu işlem otomatiktir: geri çağırma yalnızca bağımlılıkları değiştiğinde yeniden oluşur. Kod daha okunaklı, performans daha tutarlı olur.

Aynı şekilde türetilmiş diziler ve nesneler de otomatik memouze edilir.

useCallback'siz geri çağırma

Derleyici açıkken bir düğme tıklama işleyicisi her çizimde yeniden oluşmaz. onClick={() => setFilter('done')} yazdığında derleyici bunu otomatik olarak sabit referansla sarar.

Bu, memo ile sarılmış alt bileşenlerin gereksiz yeniden çizilmesini önler. Elle useCallback yazmaya gerek kalmaz.

Yine de bağımlılıkların doğru olduğundan emin olmalısın; derleyici yanlış bağımlılığı düzeltmez.

Uygulama TodoList bileşenini yaz

TodoList yaz. todos ve filter özellikleri alsın. filter === 'all' ? todos : todos.filter(t => t.done) ile visible hesapla. <button onClick={() => setFilter('done')}>Tamam</button> ve <ul> içinde visible.map ile <li key={t.id}>{t.text}</li> göster. Dışa aktar.

Başlangıç kodu

App.jsx
// TodoList bileşenini buraya yaz

Örnek çözüm

App.jsx
import { useState } from 'react';

function TodoList({ todos }) {
  const [filter, setFilter] = useState('all');
  const visible = filter === 'all' ? todos : todos.filter(t => t.done);
  return (
    <div>
      <button onClick={() => setFilter('done')}>Tamam</button>
      <ul>{visible.map(t => <li key={t.id}>{t.text}</li>)}</ul>
    </div>
  );
}
export default TodoList;

Soru ve cevaplar

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

1 Boşluğu doldur: filtreli listeyi hesapla

Soru
function TodoList({ todos, filter }) {
  const visible = filter === 'all' ? todos : todos.____(t => t.done);
  return <ul>{visible.map(t => <li key={t.id}>{t.text}</li>)}</ul>;
}
Cevap
function TodoList({ todos, filter }) {
  const visible = filter === 'all' ? todos : todos.filter(t => t.done);
  return <ul>{visible.map(t => <li key={t.id}>{t.text}</li>)}</ul>;
}

Açıklama: todos.filter ile koşullu eleman seçilir.

2 React Compiler açıkken ne yazmana gerek kalmaz?

  • useState
  • import
  • useMemo ve useCallback Doğru cevap
  • export

Açıklama: Derleyici memoizasyonu otomatik yapar.

3 Memoizasyon kavramlarını eşleştir

Kavram Anlamı
useCallback Elle sarma
derleyici Otomatik sarar
memo Alt bileşeni önbelleğe alır
bağımlılık Değişince yeniden hesap

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