[React] useLayoutEffect

설명

컴포넌트 Render와 Paint 사이에 실행되는 Hook

용어

  • Render: DOM Tree 를 구성하기 위해 각 엘리먼트의 스타일 속성을 계산하는 과정
  • Paint: 실제 스크린에 Layout을 표시하고 업데이트하는 과정

리액트 훅 실행순서

useEffect와의 useLayoutEffect

useEffect
  • Render와 Paint 후 실행
  • 비동기적(asynchronous)으로 실행
  • Paint 된 후 실행되기 때문에, useEffect내부에 dom에 영향을 주는 코드가 있을 경우 사용자 입장에서는 화면의 깜빡임을 보게됨
useLayoutEffect
  • Render후 실행
  • 동기적(synchronous) 으로 실행
  • paint가 되기전에 실행되기 전에 dom을 조작하는 코드가 존재하더라도 사용자는 감빡임을 경험하지 않음

단점

  • useLayoutEffect는 동기적으로 실행되고 내부의 코드가 모두 실행된 후 painting작업을 거침.
  • 따라서 로직이 복잡할 경우 사용자가 레이아웃을 보는데까지 시간이 오래걸린다
  • 기본적으로는 항상 useEffect만을 사용하는 것을 권장

사용

  • useEffect와 동일
useLayoutEffect(() => {
  // effect
  return () => {
    cleanup
  };
}, [input])

links

social