리액트의 컴포넌트는 생성(Mount), 업데이트(Update), 제거(Unmount)되는 세가지의 라이프 사이클을 가지고 있다.
- 클래스형 컴포넌트 : component 상속 필수, render() 메소드 필수
- 함수 컴포넌트 : react hook 사용, useState/useEffect 사용해서 state, lifeCycle 메소드 따로 구현해야함
클래스형 컴포넌트

1. Mount
컴포넌트의 인스턴스가 생성되어 DOM 상에 삽입될 때에 순서대로 호출
- constructor()
- state를 초기화하거나 인스턴스에 이벤트 처리 메서드를 바인딩할때
- static getDerivedStateFromProps()
- render()
- 클래스 컴포넌트에서 반드시 필요, 함수 컴포넌트에선 render()없이 return()에서 컴포넌트 렌더링
- 컴포넌트의 state를 변경🙅, 브라우저와 직접적으로 상호작용🙅
- 호출될 때마다 동일한 결과를 반환🙆
- componentDidMount()
- 컴포넌트가 마운트된 직후(트리에 삽입된 직후, 화면에 나타났을 때) 호출
- 네트워크 요청을 보내기 적절한 위치, 데이터 구독을 설정하기 좋은 위치
- DOM속성을 읽거나 직접 변경하는 작업을 진행
2. Update
props/state가 변경될때, 컴포넌트가 다시 렌더링될 때 순서대로 호출
- static getDerivedStateFromProps()
- shouldComponentUpdate()
- 갱신이 일어난 직후 호출
- 반환값이 없다면 해당 인자는 undefined, 기본적으로 true를 반환하며 false를 반환할 경우에는 render함수를 호출하지 않음.
- 추가적인 렌더링을 유발. 컴포넌트 최적화 작업에 유용. 리액트에서 변화가 발생하는 부분만 업데이트를 해줘서 성능이 좋아짐. 변화하지 않은 부분은 리렌더링을 하지 않아 불필요한 렌더링을 줄일 수있다.
- render()
- getSnapshotBeforeUpdate()
- 가장 마지막으로 렌더링된 결과가 DOM 등에 반영되기 전에 호출
- 컴포넌트가 DOM으로부터 스크롤 위치 등과 같은 정보를 변경되기 전에 얻을 수 있음
- return 값은 snapshot or null
- componentDidUpdate()
- 업데이트가 발생(리랜더링)한 직후에 호출
- 이시점에서 this.porps 와 this.state 가 바뀌어있다. 파라미터를 통해서 이전값을 조회 할 수 있음.
3. Unmount
컴포넌트가 DOM 상에서 제거될 때에 호출
- componentWillUnmount()
- 마운트 해제되고 파괴되기 직전에 호출
- 여기서 생성된 구독 해제 등 필요한 모든 정리 작업을 수행. setState() 호출🙅
- 컴포넌트 인스턴스가 마운트 해제되고 나면, 절대로 다시 마운트되지 않음.
함수 컴포넌트

useEffect를 통해 mount, update, unmount 처리 가능

https://ko.reactjs.org/docs/react-component.html
useEffect+함수 컴포넌트 👉 https://guiyomi.tistory.com/21
https://adjh54.tistory.com/43