프론트엔드분야를 공부하며 생길수 있는 의문점과 가져야할 지식에 대하여 공부하는 바를 적은 글입니다.
컴포넌트가 생성되고 사라지기까지, 즉 앱이 실행되고 종료될때까지 실행되는 일련의 과정을 말한다.
앱이 실행되고 종료되기까지, 메서드로 나누어 관리되는데 이것을 라이프 사이클 메서드 라고 한다.
크게 3가지 생명 주기를 가지는데, 마운트, 업데이트, 언마운트 이다.
마운트란, DOM이 생성되어 브라우저에 나타나는 과정이다
constructor
constructor(props){}
getDerivedStateFromProps
getDerivedStateFromProps(props, state){}
render
render (){JSX}
componentDidMount
componentDidMount(){}
컴포넌트의 변경사항이 있을때 실시한다. (4가지의 경우 존재)
업데이트를 거친 컴포넌트는 리렌더링을 통해 브라우저에 표시.
getDerivedStateFromProps
getDerivedStateFromProps(props, state) {}
shouldComponentUpdate
shouldComponentUpdate(nextProps, nextState) {}
render
getSnapshotBeforeUpdate
getSnapshotBeforeUpdate(preProps, preState) {}
componentDidMount
componentDidUpdate(preProps, preState, snapshot) {}
DOM에서 컴포넌트를 제거하는 과정.
componentWillUnmount() {}
위에서 언급한 생명주기 메서드와 과정은 클래스형 컴포넌트의 경우이고, 함수형 컴포넌트의 경우 기능은 같지만 다른 방식으로 구현된다.
constructor, getDerivedStateFromProps
useState
를 사용하여 state를 선언하고, 컴포넌트 내부에서 사용될 메서드를 선언한다.render
componentDidMount
useEffect
를 통하여 구현한다. import React, {useState, useEffect} from "react";
function App(){
/**
* 컴포넌트 호출 시 가장 먼저 호출이 되는 공간
* 이 공간에서 state, 컴포넌트 메서드들을 선언한다.
*/
const name = "함수형 컴포넌트";
const [age, setAge] = useState(20);
useEffect(() => {
console.log("렌더링 이후 수행된다.");
}, [])
return (
<div>
<p>{name}</p>
<p>{age}</p>
</div>
)
}
export default App;
useEffect
를 통하여 업데이트 과정의 모든 메서드를 대신한다. import React, {useState, useEffect} from "react";
function App(props){
const [info, setInfo] = useState(
{
name : "업데이트 과정",
age : 20,
isOperate : false
}
);
useEffect(() => {
console.log("인자로 들어간 props.data, info.name이 변경될때 리렌더링되며 수행된다.");
}, [props.data, info.name])
return (
<div>
</div>
)
}
export default App;
useEffect
메서드가 대신하여 수행한다.App.js
import React, {useState, useEffect} from "react";
import unmountComponent from "./unmountComponent";
function App(props){
const [unmountState, setUnmountState] = useState(true);
const unmount = () => {
setUnmountState(!unmountState);
};
return (
<div>
<button onClick = {unmount}>제거</button>
{
unmountState && (
<unmountComponent />
)
}
</div>
)
}
export default App;
unmountComponent.js
import React, {useState, useEffect} from "react";
function unmountComponent(){
useEffect(() => {
return () => {
console.log("컴포넌트 언마운트");
}
}, [])
return (
<div>언마운트 컴포넌트</div>
)
}
클래스형 | 함수형 | |
---|---|---|
특징 | render 메서드와 Component 상속 필수 | React Hook 사용, 간단한 Component 선언 |
단점 | 많은 메모리 사용, state, props 사용이 불편 | useState, useEffect의 메서드를 사용하여 state, 생명주기 메서드를 구현해야 한다. |