Эффекты, созданные с помощью useEffect
, запускаются после фазы рендеринга и, следовательно, после цикла рендеринга.Это сделано для того, чтобы убедиться, что во время фазы рендеринга не выполняется никаких побочных эффектов, которые могут вызвать несоответствие
Согласно документации
Мутации, подписки, таймеры, ведение журнала и другиепобочные эффекты не допускаются внутри основного тела компонента функции (называемого фазой рендеринга React).Это приведет к запутанным ошибкам и несоответствиям в пользовательском интерфейсе.
Функция, переданная в useEffect
, запустится после фиксации рендера на экране.
useEffect
hookможет использоваться для репликации поведения методов жизненного цикла componentDidMount
, componentDidUpdate
и componentWillUnmount
для компонентов класса в зависимости от аргументов, передаваемых в массив зависимостей, который является вторым аргументом для useEffect и функции возврата из выполняемого обратного вызоваперед запуском следующего эффекта или перед размонтированием
Для некоторых случаев использования, таких как animations
, вы можете использовать useLayoutEffect
, который выполняется синхронно после всех мутаций DOM.Используйте это для чтения макета из DOM и синхронного повторного рендеринга.Обновления, запланированные внутри useLayoutEffect, будут сбрасываться синхронно до того, как браузер сможет рисовать.