Что такое useMemo

Ответ

useMemo — это хук React, который мемоизирует вычисления, чтобы избежать повторных вычислений при каждом рендере. Он принимает функцию и массив зависимостей, и возвращает мемоизированное значение, которое обновляется только при изменении зависимостей.

Пример:

import React, { useMemo } from 'react';

const ExpensiveComponent = ({ a, b }) => {
  const result = useMemo(() => {
    console.log('Вычисляется...');
    return a * b;
  }, [a, b]); // Пересчитывается только при изменении a или b

  return <div>{result}</div>;
};

Когда использовать:

  • Тяжёлые вычисления
  • Оптимизация производительности
  • Избежание лишних рендеров дочерних компонентов

Не злоупотребляйте useMemo для простых операций, так как он тоже потребляет ресурсы.

Ответ 18+ 🔞

Эй, слушай сюда, про этот ваш useMemo! Это ж как волшебная таблетка от долбанутых пересчётов в Реакте. Представь: у тебя компонент каждый раз пиздит как сумасшедший, пересчитывая одно и то же, а ты сидишь и думаешь — «нахуя?».

Вот useMemo тебе и говорит: «Чувак, расслабься, я запомню». Кидаешь ему функцию, которая делает тяжёлую работу, и массив зависимостей — что-то вроде списка «наблюдай за этим, а на остальное забей». И он возвращает тебе мемоизированное значение, которое обновится только если что-то в этом списке ёбнулось.

Смотри, как это выглядит в деле:

import React, { useMemo } from 'react';

const ExpensiveComponent = ({ a, b }) => {
  const result = useMemo(() => {
    console.log('Щас мозги сломаю... вычисляю!');
    return a * b; // Какая-то ебанутая математика
  }, [a, b]); // Пересчитает только если 'a' или 'b' изменились, а не от каждого чиха

  return <div>{result}</div>;
};

Когда его впихивать, чтобы не выглядеть идиотом:

  • Тяжёлые вычисления, от которых комп начинает потеть и вентилятор орать как сучка.
  • Оптимизация производительности, когда рендеры летят чаще, чем мухи на говно.
  • Чтобы дочерние компоненты не дёргались просто так, из-за того что родитель чихнул.

Но смотри, не будь мудаком — не юзай useMemo для всякой хуйни вроде сложения 2+2. Он сам по себе тоже жрёт ресурсы, это тебе не конфетка бесплатная. Используй с умом, а то будет как с тем Герасимом — сделаешь максималистскую хуйню и потом будешь метаться.