일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- array
- react localStorage
- 자바스크립트
- es6
- 프로그래머스
- 비트 연산자
- axios
- 프리온보딩
- Redux
- 원티드
- 파이어베이스
- 알고리즘
- localstorage
- Component
- firebase
- TypeScript
- v9
- 브라우저
- Reducer
- JS
- 타입스크립트
- 프론트엔드
- 리액트
- til
- 컴포넌트
- CORS
- react
- JavaScript
- Frontend
- state
- Today
- Total
도리쓰에러쓰
[React] 라이프사이클(Lifecycle)에 대해 본문
1. 라이프사이클(Lifecycle) 이란?
리액트는 컴포넌트 기반의 View를 중심으로 한 라이브러리이다.
그래서 각각의 컴포넌트에는 라이프사이클(=수명 주기)가 존재한다.
컴포넌트는 생성(mounting) ▶ 업데이트(updating) ▶ 제거(unmounting)의 생명주기를 갖는다.
위 이미지는 라이프사이클(Lifecycle)을 나타낸 것이다.
라이프사이클(Lifecycle)이 업데이트될 때 아래 링크를 참고하여 확인해보는 것이 좋을 것 같다.
2. 라이프사이클(Lifecycle)의 분류
라이프사이클(Lifecycle)은 크게 생성(Mount)될 때, 업데이트(Update)할 때, 제거(Unmount)할 때 3가지로 나눌 수 있다.
1️⃣ 마운트 (Mount)
: DOM이 생성되고 웹 브라우저 상에서 나타나는 것
2️⃣ 업데이트 (Update)
: 업데이트는 아래와 같은 4가지 상황에서 발생한다.
1) props가 바뀔 때 2) state가 바뀔 때
3) 부모 컴포넌트가 리렌더링될 때 4) this.forceUpdate로 강제 렌더링을 트리거할 때
3️⃣ 언마운트 (Unmount)
: DOM에서 제거되는 것
3. 라이프사이클(Lifecycle) 메서드
1️⃣ constructor
- 컴포넌트 생성자 메서드
- 컴포넌트가 생성되면 가장 먼저 실행되는 메서드
- 초기 state를 정할 수 있다.
const ex = () => {
const [count, setCount] = useState(0);
}
2️⃣ getDerivedStateFromProps
- props로 받아온 값을 state에 넣을 때 사용
3️⃣ shouldComponentUpdate
- props나 state를 변경했을 때, 리렌더링을 할지 말지 결정하는 메서드
- 반드시 boolean 반환해야 한다.
- React.memo와 유사하다.
const ex = React.memo(() => {
...
},
(prev, next) => {
return next.value === prev.value;
}
)
4️⃣ render
- 컴포넌트를 렌더링하는 메서드
- 함수 컴포넌트에서는 render()를 쓰지 않고 컴포넌트를 렌더링한다.
const ex = () => {
return <p>Hi</p>;
}
5️⃣ getSnapshotBeforeUpdate
- render에서 만들어진 결과가 브라우저에 반영되기 직전에 호출된다.
- 함수 컴포넌트에서는 아직 이 기능을 대체할만한 hook이 없다.
6️⃣ componentDidMount
- 컴포넌트의 첫번째 렌더링이 마치면 호출된다.
- 이 메서드가 호출되는 시점에는 화면에 컴포넌트가 이미 나타난 상태이다.
- useEffect의 [] 의존성 배열을 비워야 똑같은 메서드 구현이 가능하다.
const ex = () => {
useEffect(() => {
...
}, []);
}
7️⃣ componentDidUpdate
- 리렌더링이 완료한 후 실행
- 의존성 배열이 변할 때만 useEffect가 실행되는 것과 같다.
useEffect(() => {
setCount((prev) => prev + 1);
}, [count]);
8️⃣ componentWillUnmount
- 컴포넌트가 화면에서 사라지기 직전에 호출된다.
- 함수 컴포넌트에서는 useEffect cleanup 함수를 통해 해당 메서드를 구현할 수 있다.
useEffect(() => {
return () => {
...
}
}, []);
9️⃣ componentDidCatch
- 맨 위 사진에는 존재하진 않지만 componentDidCatch 메서드가 존재한다.
- 컴포넌트 렌더링 도중 에러가 발생했을 때 에플리케이션이 멈추지 않고 오류 UI를 보이게 해준다.
- 함수 컴포넌트에서는 아직 이 기능을 대체할만한 hook이 없지만 곧 추가할 예정에 있다고 한다.
'React > React' 카테고리의 다른 글
[React] 상태 업데이트 로직을 컴포넌트와 분리할 수 있는 useReducer() (0) | 2022.07.16 |
---|---|
[React] 리액트 렌더링 성능 최적화 (Performance Optimize) (0) | 2022.07.15 |
[React] useCallback()과 useMemo() 사용하기 (0) | 2022.05.01 |
[React] ref를 prop으로 넘기기 - forwardRef() (0) | 2022.04.22 |
[React] 전역 상태 관리하기 - useContext() (0) | 2022.04.21 |