Какие особенности React важно учитывать на практике и почему?
Основы React
React прост в базовом использовании, но имеет набор особенностей, незнание которых приводит к типовым багам и тормозам.
Модель рендеринга
- Изменение state перерендеривает компонент и всех его детей — независимо от props. Отсюда важность структуры дерева и точечной мемоизации.
- Рендер должен быть чистой функцией: без мутаций, запросов и подписок в теле компонента — для этого есть эффекты и обработчики.
- Обновления state асинхронны и батчатся; чтение state сразу после сеттера возвращает старое значение.
Иммутабельность
React определяет изменения сравнением ссылок. Мутация объекта в state (user.name = '...') не вызовет перерендер и сломает мемоизацию. Всегда создавать новые объекты/массивы.
Правила хуков
- Хуки вызываются только на верхнем уровне компонента (не в условиях/циклах) — React сопоставляет их по порядку вызова.
- Зависимости эффектов/useMemo/useCallback должны быть полными, иначе устаревшие замыкания.
Списки и key
Элементам списков нужен стабильный key из данных; индекс массива при изменяемом списке приводит к «перепрыгиванию» состояния между элементами.
Прочее важное
- StrictMode в dev монтирует компоненты дважды — код эффектов должен быть идемпотентным.
- SyntheticEvent: события навешиваются делегированием, а не на каждый узел.
- JSX экранирует значения — XSS возможен в основном через
dangerouslySetInnerHTMLиhrefсjavascript:. - React — библиотека для UI: роутинг, работа с сервером и стейт-менеджмент выбираются отдельно.
Коротко для собеседования
Главное: перерендер каскадом вниз по дереву, чистота рендера, асинхронный батчинг обновлений, иммутабельность состояния, правила хуков и полные зависимости, стабильные key в списках, двойное монтирование в StrictMode. Большинство багов в React-коде — нарушение одного из этих пунктов.