React useLayoutEffect

2024. 12. 27. 16:44·React

useEffect와 useLayoutEffect의 실행 시점

function App() {
  const [count, setCount] = useState(0)
  useEffect(() => {
    console.log('useEffect', count)
  }, [count])
  useLayoutEffect(() => {
    console.log('useLayoutEffect', count)
  }, [count])
  function handleClick() {
    setCount((prev) => prev + 1)
  }
  return (
  	<button onClick={handleClick}>{count}</button>
  )
}

 

  • 리액트가 DOM을 업데이트
  • useLayoutEffect 실행(동기적)
    • useLayoutEffect의 실행이 종료될 때까지 기다렸다가 페인팅
    • 오래걸릴 시 지연 등의 성능 문제 발생
  • 브라우저 화면 페인팅
  • useEffect 실행

사용예시

DOM은 계산됐지만 화면에 반영되기 전에 조작하고싶은 내용이 있을때 사용합니다.

예를 들면, position: 'fixed'인 헤더와 다른 컴포넌트가 겹치지 않기 위해 헤더의 높이를 추적하는 박스를 생성하고싶을 때 

function Header() {
  const [height, setHeight] = useState(0)
  const elementRef = useRef(null)

  useLayoutEffect(() => {
    setHeight(elementRef.current.offsetHeight)
  }, [])

  return (
    <>
      {/* 헤더 */}
      <div 
        ref={elementRef} 
        style={{ position: 'fixed', top: 0, width: '100%' }}
      >
        헤더
      </div>
      {/* 헤더와 다른 컴포넌트가 겹치지 않기 위한 여백 */}
      <div style={{ height }} />
    </>
  )
}

 

 

 

 

 

 

 

[참고자료]

모던 리액트 Deep Dive

저작자표시 비영리 변경금지 (새창열림)

'React' 카테고리의 다른 글

React Core 구현하기 - 1. JSX 컴파일  (0) 2025.02.14
React18 useEffectEvent  (0) 2024.12.30
React forwardRef와 useImperativeHandle  (0) 2024.12.27
리액트 파이버의 동작  (0) 2024.12.23
리액트 Hooks와 클로저  (0) 2024.12.22
'React' 카테고리의 다른 글
  • React Core 구현하기 - 1. JSX 컴파일
  • React18 useEffectEvent
  • React forwardRef와 useImperativeHandle
  • 리액트 파이버의 동작
URE
URE
Skill: Javascript, ReactJS, Next.js, React Native ... *블로그 이전 작업(24. 04. 11 ~ 24. 04. 15)
  • URE
    Dev++
    URE
  • 전체
    오늘
    어제
    • 분류 전체보기 (51)
      • Browser (6)
      • OS (1)
      • Javascript (14)
      • React (19)
      • Next.js (4)
      • React Native (0)
      • Architecture (1)
      • Network (3)
      • 스크랩 (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Redux
    dataFetching
    react concurrent
    URL
    react
    IP
    javascript
    리덕스
    상태관리라이브러리
    자바스크립트
    react18
    JS
    Port
    참조타입
    원시타입
    TCP
    브라우저
    swr
    리액트 코어
    리액트
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
URE
React useLayoutEffect
상단으로

티스토리툴바