CodeBlanks Logo Icon CodeBlanks

useMemo vs useCallback

İki kanca arasındaki farkı öğrenirsin.

useMemo vs useCallback

İki kanca benzer ama farklı amaçlar için: useMemo değer üretir, useCallback fonksiyon referansını sabitler. Pratikte useCallback(fn, deps) === useMemo(() => fn, deps).

Bir nesne döndüren fonksiyon varsa: const data = useMemo(() => ({ '{ a, b }' }), [a, b]) doğru; useCallback yanlış olur. Bir olay işleyici varsa: const handler = useCallback(() => alert(a), [a]) doğru.

Kafa karıştıran durum: useMemo(() => () => alert(a), [a]) ile de fonksiyon sabitlenebilir. Ama useCallback bu durum için yapılmıştır; daha okunaklıdır.

Aralarındaki ilişki

useCallback aslında useMemo'nun özel bir halidir. useCallback(fn, deps) ile useMemo(() => fn, deps) aynı sonucu verir. useCallback sadece daha kısa ve daha okunaklıdır.

Hangisini seçeceğin kodun okunurluğuna bağlı. Fonksiyon sabit tutuluyorsa useCallback; nesne ya da hesap sonucu sabit tutuluyorsa useMemo. İkisi de bağımlılık dizisiyle çalışır.

İki uyarı da aynı: küçük hesaplar ve küçük fonksiyonlar için ek yük getirebilirler. Profil yapmadan her yere eklemekten kaçın. React.genellikle zaten yeterince hızlıdır.

Uygulama useCallback ile handler

Aşağıdaki iskeleti tamamla. SearchBar bileşeni yaz. useState("") ile query tanımla. handleChange'i useCallback((e) => setQuery(e.target.value), []) ile tanımla. <input value={ '{ query }' } onChange={ '{ handleChange }' } placeholder="Ara" /> göster. Dışa aktar.

Başlangıç kodu

App.jsx
import { useState, useCallback } from "react";

// SearchBar bileşenini buraya yaz

Örnek çözüm

App.jsx
import { useState, useCallback } from "react";

function SearchBar() {
  const [query, setQuery] = useState("");
  const handleChange = useCallback((e) => setQuery(e.target.value), []);
  return <input value={query} onChange={handleChange} placeholder="Ara" />;
}

export default SearchBar;

Soru ve cevaplar

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

1 Bir olay işleyiciyi sabitlemek için hangisi?

  • useState
  • useMemo
  • useRef
  • useCallback Doğru cevap

Açıklama: Olay işleyici için useCallback.

2 Değer üretmek

Soru
Bir değer üretmek için ____ kullanılır.
Cevap
Bir değer üretmek için useMemo kullanılır.

Açıklama: Değer üretmek için useMemo.

3 useMemo ve useCallback'i eşleştir

Kavram Anlamı
useMemo değer
useCallback fonksiyon
deps bağımlılık
cache önbellek

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