2020-08-01
컴포넌트가 생성되어 소멸될 때까지의 일련의 과정들을 일컫는다. 이러한 Life Cycle 안에서 특정 시점에 코드가 호출되도록 설정할 수 있는데, 이 때 사용되는 메소드를 Life Cycle Method라고 한다.
위 사진을 보면 크게 세가지가 있는데 Mounting, Updating, Unmounting이 있으며 이 세가지가 어떻게 작동되는지 알아보자
마운트란? 리액트 컴포넌트가 생성되어 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() componentDidMount() componentDidMount() {
console.log("render complete.");
}컴포넌트를 업데이트 하는 경우는 아래 4가지다.
이렇게 4가지 중 하나라도 업데이가 되면 아래의 메서드가 호출된다
static getDerivedStateFromProps shouldComponentUpdatetrue이고, 이 메서드는 초기 렌더링 또는 forceUpdate()가 사용되거나 false일때에는 호출되지 않습니다shouldComponentUpdate(nextProps, nextState) {
const { age } = this.state;
return age !== nextState.age; //true는 업데이트 하는 경우 false는 업데이트 안하는 경우
}componentWillUnmount컴포넌트가 마운트 해제되어 제거되기 직전에 호출된다. 이 메서드 내에서 타이머 제거, 네트워크 요청 취소, componentDidMount() 내에서 생성된 구독 해제 등 필요한 모든 정리 작업을 수행하면된다 주의할점은 이제 컴포넌트는 다시 렌더링되지 않으므로 setState()를 호출하면 안된다