Однажды вы проснулись со своим проектом в режиме разработки, вы поместили небольшой файл console.log в useEffect с нулевой зависимостью и ожидали, что он будет работать точно так же, как компонент класса, если бы вы разрабатывали метод жизненного цикла componentDidMount.

НЕПРАВИЛЬНО

В React 18 есть StrictMode, который вы можете включить или отключить во время разработки, который инкапсулирует все приложение.

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

Я написал об этом статью, в которой подробно рассказал об этом, если вам интересно узнать об этом больше. Ссылка здесь.

Если у вас есть какие-либо сомнения относительно извлечения внутри хука useEffect, вы должны проверить, что Дэн Абрамов ответил мне в твиттере, о чем я сообщил здесь.