react-helmet
을 사용하면서 만났던 에러: unsafe_component_lifecycle에 대해 궁금점이 생겨 찾아보았다.기본으로 돌아가서
생성 → 업데이트 → 제거
컴포넌트가 DOM에 처음 렌더링될 때 "마운팅", "업데이트"되고, 제거될 때 "언마운팅"이라고 한다.
클래스 컴포넌트에서 컴포넌트가 마운트되거나 언마운트될 때 componentDidMount
, componentWillUnmount
의 라이프사이클 메서드를 사용할 수 있다.
✅ 클래스 컴포넌트는 라이프사이클 메서드를 사용하며 함수 컴포넌트는 Hook 방식으로 작동한다. React에서 Hook은 함수 컴포넌트가 state와 라이프사이클 메서드를 사용할 수 있도록 연결한다.
✅ 각 구역에서도 render, pre-commit, commit 단계로 나눌 수 있는데,
Will
은 render,Did
는 commit을 의미한다. (그림 참고)
- render 단계: 사이드 이펙트가 없으며, React에 의해 중단 또는 재시작 될 수 있는 단계
- pre-commit 단계: DOM을 읽을 수 있는 단계.
- commit 단계: DOM을 제어하며 사이드 이펙트를 유발할 수 있고 업데이트를 등록할 수 있는 단계.
Constructor → getDerivedStateFromProps → render → componentDidMount
this.props
와 this.state
에 접근이 가능하다. 컴포넌트가 업데이트되는 몇가지 조건이 있다.
1. props나 state가 변경될 때
2. 부모 컴포넌트가 리렌더링될 때
3.this.forceUpdate
로 강제로 트리거될 때
위 업데이트 조건(1~3)에 부합하면 → getDerivedStateFromProps → shouldComponentUpdate → render → getSnapshotBeforeUpdate → componentDidUpdate
위 업데이트 조건(4)에 부합하면 → render → getSnapshotBeforeUpdate → componentDidUpdate
componentDidUpdate
에서 세번째 인자로 전달된다.componentWillUnmount
언마운트는 컴포넌트가 제거되기 전에 componentWillUnmount
만 호출하고 종료된다.
컴포넌트가 렌더링되는 과정에서 런타임 에러가 발생하면 호출되는 콜백함수이다.