Этот вопрос проверяет понимание производительности в React и того, какие операции могут негативно влиять на отзывчивость интерфейса.
React может тормозить, если:
В рендеринге выполняются тяжёлые синхронные вычисления (например, обработка больших массивов).
Происходит частое обновление состояния (setState в цикле или без оптимизации).
Компоненты не мемоизированы (React.memo, useMemo, useCallback не используются там, где нужно).
В useEffect выполняются долгие операции без разбивки на кадры (например, анимации без requestAnimationFrame).
React использует виртуальный DOM и алгоритм реконсиляции (diffing), чтобы минимизировать реальные обновления DOM. Однако, если сам рендеринг компонентов занимает много времени, это приводит к лагам.
Синхронные вычисления в рендере
const HeavyComponent = () => {
const data = processLargeArray(/* 1M элементов */); // Блокирует поток
return <div>{data.length} items</div>;
};Решение: Вынести вычисления в useMemo, Web Worker или разбить на части.
Частые обновления состояния
const [count, setCount] = useState(0);
useEffect(() => {
for (let i = 0; i < 1000; i++) {
setCount(prev => prev + 1); // 1000 ререндеров!
}
}, []);Решение: Обновлять состояние одним вызовом (setCount(1000)).
Неоптимизированные списки
{items.map(item => <Child key={item.id} data={item} />)} // Ребёнок не мемоизированРешение: Использовать React.memo(Child) или useMemo для списка.
Долгие эффекты
useEffect(() => {
while (condition) { /* Бесконечный цикл */ } // Зависание
}, []);Решение: Разбивать на асинхронные задачи или использовать setTimeout/requestIdleCallback.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию