라이프사이클은 크게 세 단계로 나눠진다. 생성될 때(Mount), 업데이트할 때(Update), 제거할 때(Unmount)로 나눠진다.
다음으로, 라이프사이클과 관련하여 클래스형 컴포넌트에서 사용할 수 있는 라이프사이클 메서드에 대해서 정리해보자.
class Example extends React.Component {
constructor(props) {
super(props);
this.state = { number: 0 };
}
함수형에서는 useState 훅을 이용하여 state를 설정할 수 있다.
const Example = () => {
const [count,setCount] = useState(0);
}
// Class
class Example extends React.Component {
render() {
returnComponent
}
}
함수형 컴포넌트에서는 render를 쓰지 않고 컴포넌트를 렌더링할 수 있다.
const example = () => {
returnComponent
}
// Class
class Example extends React.Component {
componentDidMount() {
...
}
}
함수형 컴포넌트에서는 useEffect 훅을 이용하여 componentDidMount와 componentDidUpdate, componentDidUnmount까지 나타낼 수 있다.
const Example = () => {
useEffect(() => {
...
}, [] ); // dependency array[]
}
Dependency Array
useEffect메서드의 두번째 인자이다.
dependency array를 비우면 컴포넌트가 처음 나타날 때에만 useEffect 에 등록한 함수가 호출된다.
dependency array에 특정 값을 넣게 된다면, 컴포넌트가 처음 마운트 될 때에도 호출이 되고, 지정한 값이 바뀔 때에도 호출이 된다. dependency array안에 특정 값이 있다면 언마운트시에도 호출이되고, 값이 바뀌기 직전에도 호출이 된다.
// Class
class Example extends React.Component {
componentDidUpdate(prevProps, prevState) {
...
}
}
5. componentDidUnmount
컴포넌트를 DOM에서 제거할 때 실행한다. componentDidMount에서 등록한 이벤트가 있다면 여기서 제거 작업을 한다. (e.g. removeEventListener) 만약에 setTimeout 을 걸었다면 clearTimeout 을 통하여 제거를 한다. 추가적으로, 외부 라이브러리를 사용한게 있고 해당 라이브러리에 dispose 기능이 있다면 여기서 호출한다.
// Class
class Example extends React.Component {
coomponentWillUnmount() {
...
}
}
함수형 컴포넌트에서는 useEffect()메서드의 return 부분에 Unmount할 때 정리할 메서드 cleanUp메서드를 적어주면 된다.
const Example = () => {
useEffect(() => {
return () => {
...
}
}, []);
}