본문 바로가기
Frontend

useEffect 와 useLayoutEffect 차이

by 프로그레머 2024. 3. 6.

 

useEffect 와 useLayoutEffect 차이

 

 

React의 useEffect와 useLayoutEffect 훅은 둘 다 컴포넌트 라이프사이클에 부수 효과(side effects)를 수행할 수 있게 해주지만,

실행 시점에 차이가 있다

이러한 차이는 특정 상황에서 중요할 수 있으며, 각각의 사용 사례를 이해하는 것이 중요하다

 

useEffect

  • useEffect 훅은 DOM 업데이트가 이루어진 직후에 비동기적으로 실행된다
    • 즉, 브라우저가 화면을 그리고 난 뒤에 실행되기 때문에, 이 훅을 사용하는 동작은 렌더링 결과에 영향을 주지 않고, 사용자에게 눈에 띄는 지연 없이 실행된다
  • 일반적인 부수 효과 처리에 사용된다
    • 예를 들어, 데이터 fetching, 이벤트 리스너 등록/해제, 수동 DOM 조작 등
  • 사용자에게 눈에 띄는 깜빡임이나 레이아웃 이동 없이 부수 효과를 수행할 수 있다

useLayoutEffect

  • useLayoutEffect 훅은 DOM 업데이트 직후, 그러나 브라우저가 화면에 변화를 그리기 전에 동기적으로 실행된다
    • 즉, useLayoutEffect 내의 코드는 브라우저가 어떤 그리기도 수행하기 전에 완료된다
  • 이 훅은 DOM의 레이아웃을 읽거나 변경할 때 사용된다
    • 예를 들어, 스크롤 위치 조정, DOM 요소의 크기나 위치 측정 등
    • 이러한 작업이 렌더링 사이클에 포함되어야 할 때 useLayoutEffect를 사용
  • useLayoutEffect에서 수행된 작업으로 인해 추가적인 렌더링이 발생할 수 있으므로, 성능에 영향을 줄 수 있다
    • 따라서 필요한 경우에만 사용

차이점 요약

  • 실행 시점
    • useEffect는 비동기적으로 실행되며, 브라우저가 화면을 그린 후에 실행
    • useLayoutEffect는 동기적으로 실행되며, 화면 그리기 전에 실행
  • 사용 사례
    • useEffect는 대부분의 부수 효과를 처리하는 데 사용되며, 렌더링에 영향을 주지 않는 작업에 적합
    • useLayoutEffect는 DOM의 레이아웃을 읽거나 수정해야 할 때 사용되며, 렌더링 사이클에 직접적으로 관련된 작업에 사용

일반적으로는 useEffect를 사용하는 것이 권장되지만,

레이아웃을 직접적으로 조작해야 하거나, 렌더링 사이클에 영향을 주는 작업을 수행해야 할 때는 useLayoutEffect를 사용하는 것이 더 적절할 수 있다

'Frontend' 카테고리의 다른 글

Context API란  (1) 2024.03.06
RESTful api란?  (2) 2024.03.06
React-query  (0) 2024.03.06
렌더링 성능 향상 위해 어떻게 해야 하는가  (0) 2024.03.06
메모이제이션  (1) 2024.03.05