Вопрос проверяет понимание условий, при которых использование useMemo и useCallback оправдано, а не является преждевременной оптимизацией.
Эти хуки React предназначены для оптимизации производительности, но их использование должно быть обоснованным. Основное правило: применяйте их только тогда, когда вы наблюдаете реальные проблемы с производительностью, такие как частые ререндеры или дорогие вычисления.
import React, { useMemo, useCallback, useState } from 'react';
function ExpensiveList({ items, filter }) {
// Дорогая фильтрация — оправдано useMemo
const filteredItems = useMemo(() => {
return items.filter(item => item.name.includes(filter));
}, [items, filter]);
// Простое вычисление — useMemo не нужен
const count = items.length;
return (
<ul>
{filteredItems.map(item => (
<li key={item.id}>{item.name}</li>
))}
</ul>
);
}
function Parent() {
const [count, setCount] = useState(0);
// useCallback для стабильной ссылки
const handleClick = useCallback(() => {
setCount(c => c + 1);
}, []);
return (
<div>
<button onClick={handleClick}>{count}</button>
<ExpensiveList items={bigArray} filter="test" />
</div>
);
}Вывод: используйте useMemo и useCallback только после выявления узких мест производительности с помощью профилировщика. Они полезны для дорогих вычислений и стабильных ссылок в компонентах с React.memo, но не должны применяться по умолчанию.
Уровень
Рейтинг:
4
Сложность:
6
Навыки
JavaScript
React
Ключевые слова
Подпишись на React Developer в телеграм
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию