Sobes.tech
Back to questions
Senior
5

Когда нужна мемоизация в React? useMemo, useCallback, React.memo.

Companies where asked
GPTunnel

Answer from AI

sobes.tech AI

Мемоизация в React нужна для оптимизации производительности, чтобы избежать ненужных повторных вычислений или рендеров.

  • useMemo — мемоизирует результат вычисления функции. Используется, когда есть дорогие вычисления, зависящие от определённых зависимостей.

  • useCallback — мемоизирует саму функцию, чтобы её ссылка не менялась между рендерами, если зависимости не изменились. Это полезно, когда функцию передают в дочерние компоненты, оптимизированные через React.memo.

  • React.memo — оборачивает компонент и предотвращает его повторный рендер, если пропсы не изменились (сравниваются поверхностно).

Пример:

const ExpensiveComponent = React.memo(({ onClick }) => {
  console.log('Render ExpensiveComponent');
  return <button onClick={onClick}>Click me</button>;
});

function Parent({ value }) {
  const handleClick = useCallback(() => {
    console.log('Clicked');
  }, []);

  const computedValue = useMemo(() => {
    // дорогое вычисление
    return value * 2;
  }, [value]);

  return (
    <div>
      <div>{computedValue}</div>
      <ExpensiveComponent onClick={handleClick} />
    </div>
  );
}

Здесь useMemo предотвращает повторное дорогое вычисление, useCallback сохраняет ссылку на функцию, а React.memo предотвращает лишний рендер дочернего компонента.