프론트엔드 기본개념 복습/React

[React] useLayoutEffect vs useEffect

콘요맘떼 2022. 4. 11. 19:10

  useLayoutEffect와 useEffect는 모두 의존값의 변화에 따라 side effect 함수를 실행시킨다는 점에서 유사한 성질을 가진다. 그러나 실제 그것이 동작하는 방식에 있어서 실제로 그것을 활용하는 방향성에 있어서 차이점을 지닌다.

 

  useEffect useLayoutEffect
실행 순서 컴포넌트 렌더링 → 화면 갱신 → side effect 컴포넌트 렌더링 → side effect → 화면 갱신
side effect 함수
실행 방식
비동기 동기

 

  useEffect문을 사용해서 DOM element의 style을 지정하는 등 mutation을 일으키는 경우 이미 화면이 갱신된 이후에 또 다시 화면이 갱신되면서 '깜빡거림'(flickering)이 발생한다. 이는 SPA의 장점을 망치는 현상 중 하나이다. 깜빡거림은 사용자 경험에 매우 부정적이다. 반면 useLayoutEffect는 화면 갱신이 이루어지기 전에 변경을 일으킬 수 있기 때문에 불필요한 깜빡거림이 발생하지 않는다. 따라서 state을 기준으로 DOM element에 mutation을 일으키고 싶을 때에는 useEffect 대신 useLayoutEffect를 사용하면 된다.