[TIL] LifeCycle 메소드
라이프 사이클
컴포넌트가 생성되어 소멸될 때까지의 일련의 과정들을 일컫는다. 이러한 Life Cycle 안에서 특정 시점에 코드가 호출되도록 설정할 수 있는데, 이 때 사용되는 메소드를 Life Cycle Method라고 한다.

위 사진을 보면 크게 세가지가 있는데 Mounting, Updating, Unmounting이 있으며 이 세가지가 어떻게 작동되는지 알아보자
Mount(생성단계)
마운트란? 리액트 컴포넌트가 생성되어 DOM tree
에 삽입되어 브라우저 상에 나타나는것이며 처음 한번만 실행이 된다
생성 단계에서 실행 순서는 다음과 같다
constructor()
컴포넌트를 새로 만들 때마다 호출되는 클래스 생성자이며 초기state
를 정할 수 있다 혹시state
를 사용하지 않아state
의 초기값 설정이 필요하지 않다면 생성자 함수도 생략이 가능하다. 생성자 함수를 사용할 때는 반드시super(props)
함수를 호출하여 부모 클래스의 생성자를 호출한다. 생성자 함수는 해당 컴포넌트가 생성될 때 한 번만 호출이 된다.static getDerivatedStateFromProps()
props
에 있는 값을state
와 동기화 시키는 메서드입니다 컴포넌트가 최초 마운팅 됐을 경우와 부모 컴포넌트에서 전달해주는 props가 변경 되었을 경우 호출되며, render() 메서드가 호출되기 전이므로, 변경 된 props 데이터를 state에 반영하는 작업을 이 메서드에서 처리합니다
static getDerivedStateFromProps(nextProps, prevState) {
if(nextProps.value !== prevState.value) { // 조건에 따라 특정 값 동기화 할 수 있습니다
return { value: nextProps.value };
}
return null; // state를 변경할 필요가 없다면 null을 반환합니다
}
render()
render 함수는 클래스 컴포넌트가 랜더링되는 부분(화면에 표시되는 부분)을 정의한다. 즉, 최종적으로 component에서 작업한 결과물을 return하는 method이다.componentDidMount()
컴포넌트 렌더링 완료 시 호출 됩니다 클래스 컴포넌트가 처음으로 화면에 표시된 이후 이 함수가 호출되는데 즉 render함수가 처음 한번 호출된 후 componentDidMount함수가 호출됩니다 이 함수는 컴포넌트가 화면에 처음 표시된 후 한번만 호출되므로 ajax를 통해 데이터를 불러와야 하거나 네트워크 요청을 보내기 적절한 위치입니다
componentDidMount() {
console.log("render complete.");
}
Update(업데이트 단계)
컴포넌트를 업데이트 하는 경우는 아래 4가지다.
- props가 바뀔때
- state가 바뀔때
- 부모컴포넌트가 리렌더링 될때
- this.forceUpdate를 통하여 강제로 렌더링을 트리거할 때
이렇게 4가지 중 하나라도 업데이가 되면 아래의 메서드가 호출된다
static getDerivedStateFromProps
shouldComponentUpdate
이 메서드는 성능을 최적화하기 위해 중점을 뒀으며 props 또는 state가 새로운 값으로 갱신되어서 렌더링이 발생하기 직전에 호출된다. 기본값은true
이고, 이 메서드는 초기 렌더링 또는 forceUpdate()가 사용되거나 false일때에는 호출되지 않습니다
shouldComponentUpdate(nextProps, nextState) {
const { age } = this.state;
return age !== nextState.age; //true는 업데이트 하는 경우 false는 업데이트 안하는 경우
}
render
getSnapshotBeforeUpdate
컴포넌트가 변화하기 전에 호출되는 메서드이며 return하는 값을 componentDidUpdate에서 3번째 파라미터로 받아올 수 있습니다.
getSnapshotBeforeUpdate(prevProps, prevState) {
console.log("getSnapshotBeforeUpdate");
if (prevProps.color !== this.props.color) {
return this.myRef.style.color;
}
return null;
}
componentDidUpdate
리렌더링이 마치고, 화면에 우리가 원하는 변화가 모두 반영되고 난 뒤 호출되는 메서드입니다. 3번째 파라미터로 getSnapshotBeforeUpdate 에서 반환한 값을 조회 할 수 있습니다
componentDidUpdate(prevProps, prevState, snapshot) {
console.log("componentDidUpdate", prevProps, prevState);
if (snapshot) {
console.log("업데이트 되기 직전 값: ", snapshot);
}
}
Unmount(소멸단계)
componentWillUnmount
컴포넌트가 마운트 해제되어 제거되기 직전에 호출된다. 이 메서드 내에서 타이머 제거, 네트워크 요청 취소, componentDidMount()
내에서 생성된 구독 해제 등 필요한 모든 정리 작업을 수행하면된다 주의할점은 이제 컴포넌트는 다시 렌더링되지 않으므로 setState()를 호출하면 안된다