Як працює useMemo і навіщо він потрібен
useMemo — це хук React, який дозволяє мемоізувати значення, тобто зберігати результат обчислення між рендерингами, щоб уникнути повторного обчислення без необхідності.
Це особливо корисно, якщо обчислення є ресурсомістким або залежить від змінних, які рідко змінюються.
Чому useMemo?
React викликає компонент знову при кожному повторному рендерингу, і всі обчислення виконуються знову, навіть якщо результат буде таким самим.
Якщо функція важка — це знижує продуктивність.
Важливо:
useMemo не гарантує кеш — він може бути очищений при низьких ресурсах пам'яті. Це підказка для оптимізації, а не строгий кеш.
Синтаксис
const memoizedValue = useMemo(() => computeExpensiveValue(a, b), [a, b]);computeExpensiveValue— функція, що повертає результат.[a, b]— залежності. Якщо вони не змінилися — React поверне кешоване значення.
Приклад: без useMemo
const App = ({ items }) => {
const filtered = items.filter(item => item.active); // кожен рендер — новий фільтр
return <List data={filtered} />;
};Кожного разу при повторному рендерингу filter буде викликано, навіть якщо items не змінилися.
Приклад: з useMemo
const filtered = useMemo(() => {
return items.filter(item => item.active);
}, [items]);Тепер фільтрація відбуватиметься тільки якщо items змінюється, інакше буде повернуто кешоване значення.
useMemo vs useCallback
| **** | useCallback | useMemo |
|---|---|---|
| Що повертає | Повертає функцію | Повертає значення |
| Приклад | () => | heavyComputation() |
| Застосування | Використовується для обробників | Використовується для значень |
Коли використовувати useMemo
Добре використовувати:
- Для ресурсомістких обчислень (наприклад,
sort,filter,map,reduce) - Коли передаєте обчислені значення до компонентів
React.memo - Коли
valueвикористовується як залежність уuseEffectабоuseCallback
Коротка відповідь
Для співбесідиКоротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.