AI
prepair.app
Пройти интервью →
EnglishРусскийУкраїнська
⚛️

вопросы на собеседовании React разработчика

Собеседование React смешивает специфику фреймворка — хуки, рендеринг, состояние — с основами JavaScript, по которым видно, понимаете ли вы, что React делает под капотом. Ниже — самые частые вопросы с эталонными ответами.

Junior · без опыта / до 1 годаMiddle · 2–4 года опытаSenior · 5+ лет опыта

Что спрашивают

Хуки: useState, useEffect, useMemo
Virtual DOM и reconciliation
Управление состоянием
Оптимизация рендеров
JavaScript: замыкания, event loop
TypeScript в React

10 реальных вопросов с ответами

К каждому вопросу — эталонный ответ, с которым можно сравнить свой.

1

Что такое Virtual DOM и как работает reconciliation?

Ответ

Virtual DOM — это дерево элементов в памяти, которое React сравнивает с предыдущим, чтобы вычислить минимальный набор операций над настоящим DOM. Reconciliation идёт по узлам: другой тип элемента отбрасывает всё поддерево, а проп key подсказывает React, какие дети переместились, а не изменились. Ценность не в чистой скорости — она в том, что вы описываете целевое состояние, а React сам выводит нужные мутации.

2

Объясните правила хуков. Почему нельзя вызывать хуки внутри условий?

Ответ

Хуки должны вызываться на верхнем уровне компонента или кастомного хука и в одинаковом порядке на каждом рендере. React хранит состояние хуков в массиве, индексируемом порядком вызова, поэтому условный хук сдвигает все последующие индексы, и компонент начинает читать состояние чужого хука. Именно поэтому существует правило линтера — падение здесь тихое и крайне запутанное.

3

В чём разница между useMemo, useCallback и React.memo?

Ответ

useMemo кеширует вычисленное значение, useCallback кеширует идентичность функции, а React.memo пропускает повторный рендер компонента, если пропсы поверхностно равны. Они работают в связке: мемоизировать колбэк бессмысленно, если ребёнок не обёрнут в React.memo. Все три стоят памяти и времени на сравнение, поэтому применять их надо к измеренным проблемам, а не по умолчанию.

4

Что такое замыкание в JavaScript? Приведите пример.

Ответ

Замыкание — это функция вместе с областью видимости, в которой она была создана, поэтому она сохраняет доступ к тем переменным и после выхода из внешней функции. В React этим объясняется устаревшее состояние: эффект или колбэк захватывает значение состояния из того рендера, в котором был создан, и заведённый один раз интервал продолжает читать начальное значение. Лечится функциональным обновлением состояния или добавлением зависимости в эффект.

5

Объясните event loop: как работают microtasks и macrotasks?

Ответ

Стек вызовов выполняет синхронный код до конца, затем event loop полностью вычерпывает очередь микрозадач — колбэки промисов и queueMicrotask — и только потом берёт одну макрозадачу вроде таймера или I/O-колбэка. Поэтому цепочка промисов разрешается раньше, чем setTimeout с нулевой задержкой. Этим же объясняется, почему бесконечный поток микрозадач замораживает отрисовку, а цепочка таймеров — нет.

6

Зачем нужен key в списках? Почему не стоит использовать index?

Ответ

Ключи позволяют React сопоставить детей между рендерами, чтобы перемещать узлы DOM, а не пересоздавать их, сохраняя состояние и фокус. Индекс массива ломает это при переупорядочивании или вставке, потому что индекс 0 теперь указывает на другой элемент — React переиспользует не тот узел DOM, и состояние компонента оказывается не в той строке. Правильный ключ — стабильный идентификатор из данных.

7

Что такое controlled и uncontrolled компоненты?

Ответ

Управляемый инпут берёт значение из состояния React и обновляется через onChange, поэтому состояние остаётся единственным источником правды, а валидация и форматирование делаются прямолинейно. Неуправляемый хранит значение в DOM, и вы читаете его через ref по необходимости. Управляемый — выбор по умолчанию; неуправляемый подходит для файловых инпутов, интеграции с не-React кодом и очень больших форм, где рендер на каждое нажатие клавиши слишком дорог.

8

Как работает useEffect? Что такое cleanup-функция?

Ответ

useEffect выполняется после того, как рендер закоммичен на экран, и перезапускается, когда меняется значение в массиве зависимостей. Возврат функции из него регистрирует очистку, которую React вызывает перед следующим запуском и при размонтировании — там отменяют подписки, таймеры и незавершённые запросы. Отсутствие очистки — типичная причина утечек памяти и обновлений состояния у размонтированного компонента.

9

Что такое prop drilling и как его избежать?

Ответ

Prop drilling — это передача данных через компоненты, которые их не используют, только чтобы добраться до глубокого потомка. Context решает проблему для значений, действительно глобальных для поддерева: тема, локаль, текущий пользователь. Для часто меняющихся данных лучше подходит стейт-библиотека или композиция — передача элементов через children, потому что context перерисовывает всех потребителей при каждом изменении.

10

В чём разница между == и ===? Что такое coercion?

Ответ

=== сравнивает значение и тип без преобразований, а == сначала приводит операнды к общему типу, из-за чего null == undefined истинно, и [] == false тоже истинно. Coercion — это и есть неявное приведение, и правила его достаточно сложны, чтобы мало кто помнил их под давлением. Используйте === везде; единственное частое исключение — x == null, чтобы поймать сразу null и undefined.

🦎

Прочитать ответы недостаточно

На собеседовании ты говоришь вслух под давлением. Кем задаст эти же вопросы, оценит каждый ответ и покажет, что именно подтянуть.

Пройти интервью React Frontend →
Бесплатно · 3 интервью в месяц

Другие специализации

🔍QA Manual🤖QA AutomationJava Backend🐍Python Backend🐘PHP Backend🦫Go Backend🟢Node.js Backend💚Vue Frontend🅰️Angular FrontendNext.js📈Business Analyst🎯Product Manager📋Project Manager🎨UI/UX Designer📣Marketing