Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- Vue
- vue 지역 컴포넌트
- netlify redirect
- vue 이벤트 수신
- 프로그래머스 데브코스
- 리스트 렌더링
- KDT 프로그래머스 데브코스 프론트엔드
- flex
- SCSS extend
- 쌓임맥락
- intersection opserver
- 리액트
- 프로그래머스 K_Digital Training
- git 같은계정 다른 컴퓨터
- SCSS use
- vue mixin
- Spacer
- postcss
- SCSS forward
- vuex map
- 이벤트 수식어
- 고양이 사진 검색기
- 폼 입력 바인딩
- KDT 프로그래머스
- react next
- 프로그래머스 데브코스 프론트엔드
- nextjs사용법
- 프로그래머스 프론트엔드 데브코스
- SCSS import
- 다른컴퓨터에서 git사용
Archives
- Today
- Total
혼자 적어보는 노트
[React] useEffect, useLayoutEffect 본문
직접 적용해서 사용해본 적은 없지만 useLayoutEffect의 존재에 대해 알게 되어
useEffect와 비교하며 정리를 해보기로 했다.
useEffect
컴포넌트들이 layout과 paint과정을 거친 이후에 실행된다. 비동기적으로 실행 되며
paint가 된 이후에 실행되기 때문에 useEffect 내부에 dom을 변경하는 코드가 있다면
사용자가 깜빡임을 경험하게 된다.
const Home = () => {
const [number, setNumber] = useState(0);
useEffect(() => {
setNumber(333);
}, []);
return (
<div>
<button>{number}</button>
</div>
);
};
이와 같은 코드를 작성했다면, 컴포넌트가 렌더링, paint 된 이후에
setNumber로 인해 number가 변경이 되고, 새로고침 시 0에서 333으로 변경되는 과정에서 깜빡임이 발생한다.
useLayoutEffect
컴포넌트들이 layout 배치가 된 후 실행되며 paint가 일어나기 전에 동기적으로 실행된다.
브라우저가 paint하기 전에 실행되기 때문에 dom을 변경하는 코드가 있더라도 깜빡이지 않는다.
언제 어떤걸 써야할까?
useLayout은 동기적으로 실행되기 때문에 useLayoutEffect에 작성한 코드들이
모두 실행되어야 paint과정을 거치게 되기 때문에 내부 로직이 복잡하다면 그만큼
paint되기까지에 시간이 소요되어 화면의 업데이트가 늦어질 수 있다.
React 공식 문서에도 useEffect를 사용하는 쪽으로 권장을 한다.
데이터 패칭이나 이벤트 핸들러 등 일반적으로 useEffect를 쓰되,
렌더링할 상태가 이펙트 내에서 동기적으로 초기화가 되어야한다면 고려해볼 수 있을 듯도 하다.
Reference
'React' 카테고리의 다른 글
불필요한 useEffect 제거하기 (0) | 2023.08.15 |
---|---|
[React] 클릭 시 원하는 컴포넌트로 스크롤 이동 (0) | 2022.08.20 |
[React] Emotion CSS 사용 (0) | 2022.07.10 |
[React] 아이폰 HEIC 이미지 JPEG로 변환 (0) | 2022.07.08 |
[React] 이미지 업로드 시 이미지 압축 (0) | 2022.07.06 |
Comments