Нет, при неизменных userId и roles===undefined зависимости остаются равными по Object.is. Сам дополнительный рендер не означает повторного запуска эффекта с тем же массивом зависимостей.
Сработает ли useEffect, если необязательный roles отсутствует?
Нет, при неизменных 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, который не нужно путать с изменением зависимостей.