> Как найти и решить проблему производительности при вводе в input в React-приложении? (React)

Уровень: senior · Роль: frontend · Категория: Технические вопросы

Компании: Сфера, Исходный Код

Стек: React

> Пример ответа

Для диагностики проблемы производительности при вводе в input в React используйте React DevTools Profiler: запишите сессию, найдите компонент с высокой задержкой (долгие re-render). Типичные причины:

  1. Лишние ререндеры - каждый символ вызывает обновление всего дерева. Решение: оберните input в мемоизированный компонент (React.memo) или вынесите его состояние в отдельный контейнер.

  2. Тяжелые вычисления на каждый кейstroke - например, фильтрация большого списка. Решение: используйте useDeferredValue (React 18) для отложенного обновления списка или debounce (lodash.debounce) с задержкой 300-500ms.

  3. Синхронные операции в рендере - вызов useMemo с дорогими вычислениями. Перенесите их в useEffect или Web Worker.

  4. Некорректные ключи списков - при вводе сбрасывается состояние дочерних элементов. Проверьте уникальность и стабильность key.

Пример исправления с useDeferredValue:

JSX
const [query, setQuery] = useState('');
const deferredQuery = useDeferredValue(query);
const filteredList = useMemo(() =>
bigList.filter(item => item.includes(deferredQuery)),
[deferredQuery]
);

После изменений повторите профилирование - время рендера должно снизиться до <16ms (60fps).

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью