Сработает ли useEffect, если необязательный roles отсутствует?

Нет, при неизменных userId и roles===undefined зависимости остаются равными по Object.is. Сам дополнительный рендер не означает повторного запуска эффекта с тем же массивом зависимостей.

Короткий ответ

Что ответить на собеседовании

Нет, при неизменных userId и roles===undefined зависимости остаются равными по Object.is. Сам дополнительный рендер не означает повторного запуска эффекта с тем же массивом зависимостей.

Подробный разбор

Ответ с пояснениями

Условие

React-компонент использует useEffect(effect,[userId,roles]). Roles — необязательный prop без значения по умолчанию, поэтому undefined. После первого монтирования происходит рендер с тем же userId и снова без roles. Запустится ли эффект из-за самого рендера?

Ответ

Нет, при неизменных userId и roles===undefined зависимости остаются равными по Object.is. Сам дополнительный рендер не означает повторного запуска эффекта с тем же массивом зависимостей.

При первом монтировании эффект запускается после commit. Если roles задаётся default-выражением roles = [], каждый вызов компонента может создавать новый массив, и это уже другая ситуация. Мутация одного и того же массива, напротив, не меняет его ссылку. В dev StrictMode возможен дополнительный цикл setup/cleanup, который не нужно путать с изменением зависимостей.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее