React의 라이프 사이클을 알아보자.
리액트의 라이프 사이클이란?
리액트의 클래스 컴포넌트는 생명주기(라이프 사이클)을 가지고 있다.
이 생명주기마다 함수를 가지는데, 해당 함수들을 이용해서 특정 시점에 원하는 동작을 하도록 만들 수 있다.
- 생성 과정
- 갱신 과정
- 소멸 과정
위와 같이 크게 3가지 과정이 있다.
생성 과정은 컴포넌트 생성부터 생성 완료까지를 나타내고, 갱신 과정은 생성 완료부터 갱신 완료까지를 나타낸다. 소멸 과정은 갱신 완료부터 소멸 완료 까지를 나타낸다.
코드로 작성해보기
import React, { Component } from "react";
class Life extends Component {
static getDerivedStateFromProps() {
console.log("getDerivedStateFromProps 호출");
return {};
}
constructor(props) {
super(props);
this.state = {};
console.log("constructor 호출");
}
componentDidMount() {
console.log("componentDidMount 호출");
// this.setState({ update: true });
}
componentDidUpdate() {
console.log("componentDidUpdate 호출");
}
componentWillUnmount() {
console.log("componentWillUnmount 호출");
}
getSnapshotBeforeUpdate() {
console.log("getSnapshotBeforeUpdate 호출");
return {};
}
shouldComponentUpdate() {
console.log("shouldComponentUpdate 호출");
return true;
}
render() {
console.log("render 호출");
return null;
}
}
export default Life;
해당 컴포넌트를
생성 과정에서는 constructor - getDerivedStateFromProps - render - componentDidMount 가 실행이 된다.
componentDidMount(){
...
this.setState({update: true});
}
위와 같이 componentDidMount 함수에 setState를 통해서 state 값을 변경시키면 갱신과정을 볼 수 있다.
갱신 과정에서는 getDerivedStateFromProps - shouldComponentUpdate - render - getSnapshotBeforeUpdate - componentDidUpdate 가 실행이 된다.
소멸 과정은 컴포넌트가 사라질 때의 과정을 얘기한다.
class App extends Component {
constructor(props) {
super(props);
this.state = { hasDestroyed: false };
}
componentDidMount() {
this.setState({ hasDestroyed: true });
}
render() {
return (
<div>
<div>{this.state.hasDestroyed ? null : <Life />}</div>
</div>
);
}
}
export default App;
위의 라이프 컴포넌트는 맨 처음에는 렌더링 되었다가 setState 안의 hasDestroyed의 값이 변경됨에 따라 사라진다.
이때 콘솔창을 확인해보면 소멸 과정을 확인할 수 있다.
소멸 과정에서는 componentWillUnmount가 실행이 된다.
Leave a comment