Есть объект const a с двумя полями, и он добавлен в массив зависимостей useEffect. Мы изменяем поля этого объекта, не переопределяя сам объект. Будет ли при этом перевыполняться useEffect?

Если зависимость — [a], React сравнивает ссылку на объект, поэтому изменение его полей без замены ссылки не считается изменением этой зависимости.

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

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

Если зависимость — [a], React сравнивает ссылку на объект, поэтому изменение его полей без замены ссылки не считается изменением этой зависимости.

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

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

Если зависимость — [a], React сравнивает ссылку на объект, поэтому изменение его полей без замены ссылки не считается изменением этой зависимости.

Более того, такая мутация сама по себе не вызывает render. Обновляйте состояние неизменяемо или перечисляйте действительно нужные примитивные зависимости. Даже при другом render эффект с прежней ссылкой a не перезапустится только из-за изменённого внутреннего поля.

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

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

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

Подробнее