React · Урок 53

React: хуки и мемоизация

React перерисовывает всё, что затронуто изменением состояния. Мемоизация ограничивает «лишний» рендер и превращает медленные списки в быстрые. Разбираем главные инструменты.

useMemo и useCallback

// Дорогое вычисление только при смене входных данных
const total = useMemo(() => items.reduce((s, i) => s + i.price, 0), [items]);

// Стабильная ссылка на функцию между рендерами
const onSave = useCallback(async (data) => {
  await api.save(data);
}, [deps]);
💡
Не мемоизируйте всё подряд. Правило простое: если что-то реально тормозит (замерьте!), мемоизируйте. Абстрактные оптимизации чаще всего про запас, чем про задачу.

React.memo и кастомные хуки

// Дочерний компонент не рендерится, если пропсы не изменились
const Row = React.memo(({ item }) => (
  <li>{item.title}</li>
));

// Кастомный хук: переиспользуемая логика с состоянием
function useLocalStorage(key, initial) {
  const [value, setValue] = useState(() => JSON.parse(localStorage.getItem(key)) ?? initial);
  useEffect(() => { localStorage.setItem(key, JSON.stringify(value)); }, [key, value]);
  return [value, setValue];
}
ℹ️
Кастомный хук — это обычная функция, начинающаяся с «use» и вызывающая другие хуки. Это главный способ вынести повторяющуюся логику React. На собеседованиях «напишите свой хук» — частая живая задача.