CodeBlanks Logo Icon CodeBlanks

Meydan okuma: Memo'lu liste

React.memo, useMemo ve useCallback ile optimize edilmiş bir filtreli liste yazarsın.

Meydan okuma: Memo'lu liste

Bu meydan okumada memo ile sarılmış bir Row bileşeni ve useCallback ile sabitlenmiş bir tıklama işleyici yazacaksın.

Amaç: ana bileşen yeniden çizildiğinde satırlar gereksiz yere çizilmesin. memo, prop'lar aynıysa çizimi atlar; useCallback ise işleyicinin referansını korur.

Bu ikili, uzun listelerde performans kazanmanın temel yoludur.

Uygulama MemoRow ve handleClick

Row bileşeni yaz: { id, onClick } proplarını destructure et, <li onClick={() => onClick(id)}>{id}</li> bas. const MemoRow = memo(Row) ile sar. List bileşeni yaz: useState([1, 2, 3]) ile ids tut, useCallback ile handleClick (id alır, console.log yapar, bağımlılık []) tanımla. <ul> içinde ids.map(id => <MemoRow key={id} id={id} onClick={handleClick} />) bas. export default List.

Başlangıç kodu

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

// Row, MemoRow, List bileşenlerini buraya yaz

Örnek çözüm

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

function Row({ id, onClick }) {
  return <li onClick={() => onClick(id)}>{id}</li>;
}

const MemoRow = memo(Row);

function List() {
  const [ids] = useState([1, 2, 3]);
  const handleClick = useCallback((id) => {
    console.log(id);
  }, []);
  return (
    <ul>
      {ids.map((id) => (
        <MemoRow key={id} id={id} onClick={handleClick} />
      ))}
    </ul>
  );
}

export default List;

Soru ve cevaplar

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

1 memo ne zaman çizimi atlar?

  • State değişirse
  • useEffect tetiklenirse
  • Her zaman çizilir
  • Prop'lar aynıysa Doğru cevap

Açıklama: memo, prop'lar aynıysa çizimi atlar.

2 useCallback bağımlılık

Soru
const handleClick = useCallback((id) => {
  console.log(id);
}, ____);
Cevap
const handleClick = useCallback((id) => {
  console.log(id);
}, []);

Açıklama: Boş bağımlılık dizisi işleyiciyi sabit tutar.

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