리액트 라이프 사이클이란?
리액트 컴포넌트의 탄생, 변화, 죽음
클래스형 컴포넌트의 라이프 사이클
1. Mount
컴포넌트가 화면에 추가될 때
- Render phase
- constructor()
- getDerivedStateFromProps()
- render
- Commit phase
- 리액트가 DOM 업데이트
- componentDidMount()
2. Update
컴포넌트가 새로운 prop, 상태를 받을 때
- Render phase
- New props, setState(), forceUpdate()
- shouldComponentUpdate() 에서 true 반환하는 경우 + forceUpdate()
- render
- Pre-Commit Phase
- getSnapShotBeforeUpdate()
- Commit phase
- 리액트가 DOM 업데이트
- componentDidUpdate()
3. UnMount
컴포넌트가 화면에서 제거될 때
- Commit phase
- componentWillUnmount()
useEffect
함수형 컴포넌트에서는 useEffect hook이 기존의 라이프사이클을 대체한다.
하지만 클래스형 컴포넌트의 라이프 사이클과는 나누어 생각해야 한다.
Instead, always focus on a single start/stop cycle at a time. It shouldn’t matter whether a component is mounting, updating, or unmounting. All you need to do is to describe how to start synchronization and how to stop it. If you do it well, your Effect will be resilient to being started and stopped as many times as it’s needed.
1. 동기화 시작
- useEffect의 몸체에 어떤 동기화를 할지 적는다.
useEffect(() => {
console.log("컴포넌트 나타날 때마다 동기화");
});
useEffect(() => {
console.log("컴포넌트 처음 나타났을 때만 동기화");
}, []);
useEffect(() => {
console.log("id가 변경될 때마다 동기화");
const connection = createConnection(id);
connection.connect();
}, [id]);
2. 재동기화
- useEffect의 두번째 인자로 언제 재동기화할지 알린다.
- 이러한 인자는 prop 또는 state
3. 동기화 중지
- 동기화 중지를 위한 cleanup 함수 호출
- useEffect의 두번째 인자로 언제 cleanup을 실행할지 알린다.
useEffect(() => {
return () => {
console.log("컴포넌트 제거 직전에 찍혀요");
};
});
useEffect(() => {
return () => {
console.log("id 업데이트 직전에 찍혀요");
connection.disconnect();
};
}, [id]);
참고자료
'TIL > React' 카테고리의 다른 글
[240331] 모던 리액트 딥 다이브 스터디 3주차 - (2) children props (0) | 2024.03.31 |
---|---|
[240327] 모던 리액트 딥 다이브 스터디 3주차 - (1) useContext (0) | 2024.03.27 |
[240320] 리액트의 렌더링, 렌더링 최적화, 메모이제이션 (0) | 2024.03.20 |
[240207] 리액트의 가상 돔(Virtual DOM) (1) | 2024.02.07 |