Нет: выбор зависит от смысла. Действие, непосредственно вызванное событием, можно обработать там же; эффект нужен для синхронизации после commit с внешней системой.
Когда флаг стоит менять в обработчике, а когда в эффекте
Нет: выбор зависит от смысла. Действие, непосредственно вызванное событием, можно обработать там же; эффект нужен для синхронизации после commit с внешней системой.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
React-обработчик меняет ref с признаком действия пользователя. Коллега предлагает всегда переносить такие изменения в useEffect. Верно ли это правило?
Ответ
Нет: выбор зависит от смысла. Действие, непосредственно вызванное событием, можно обработать там же; эффект нужен для синхронизации после commit с внешней системой.
Изменение ref не вызывает render, поэтому видимый флаг обычно должен быть state. Если флаг означает «DOM уже обновлён», ставить его сразу после setState нельзя — нужен соответствующий эффект. Если он лишь блокирует повторный синхронный запуск обработчика, ref может быть уместен. Без конкретного инварианта перенос в эффект способен добавить задержку и новую гонку.