함수형 컴포넌트의 생명주기
Front-end React함수형 컴포넌트 생명주기
useEffect()
useEffect()
를 사용해 클래스 컴포넌트 생명주기의 기능들을 동시에 활용할 수 있다.
componentDidMount()
equivalent
useEffect
의 의존성 배열에 아무것도 넣지 않으면 Mount 시에만 렌더한 후 끝나게 된다.
useEffect(() => {
console.log("mount 후 실행")
},[])
componentDidUpdate()
equivalent
의존성 배열을 부여하지 않으면 state 업데이트 시 무조건 다시 실행된다.
useEffect(() => {
console.log("업데이트 후 실행")
})
별도의 state 업데이트를 트래킹해서 변화가 있을 때 실행시키고 싶으면 의존성 배열에 해당 state를 넣는다.
useEffect(() => {
console.log("myState 업데이트 후 실행")
},[myState])
componentDidUpdate()
와는 달리, 컴포넌트가 처음 렌더될 때에도 실행된다는 차이가 있다.
componentWillUnmount()
equivalent
return()
에 원하는 기능을 넣는다.
useEffect(() => {
return () => {
console.log("unmount 이전 실행")
}
})
예제
import {useEffect, useState} from "react";
import {useRouter} from "next/router";
export default function FunctionCounterPage() {
const router = useRouter();
const [count, setCount] = useState(0);
useEffect(() => {
console.log("그려지고 나서 실행");
return () => {
console.log("사라질 때 실행");
};
}, []);
useEffect(() => {
console.log("변경되고 나서 실행");
});
return (
<>
<div>현재 카운터 : {this.state.count}</div>
<button onClick={this.handleClickIncrement}>Increment</button>
<button onClick={this.handleClickMovePage}>Exit to main page</button>
</>
);
}
- 해당 페이지에 들어가게 되면
그려지고 나서 실행 변경되고 나서 실행
- Increment 버튼을 클릭하면
변경되고 나서 실행
- Exit 버튼을 클릭하면
사라질 때 실행
의 콘솔 로그 메세지가 찍힌다.