Lifecycle = 생애주기
인간 : 일반적으로 시간에 흐름에 따라, 탄생부터 죽음에 이르는 순간에 따른 단계적인 과정
개발 : 프로그램의 실행과 종료
탄생 : 컴포넌트가 화면에 나타나는 것 (Mount) - ex) 초기화작업
변화 : 스테이트가 바뀌거나, 리렌더되는 과정 (update) - ex)예외 처리 작업
죽음 : 컴포넌트가 화면에서 사라짐 (UnMount) - ex) 메모리 정리 작업
Class형 컴포넌트를 만들 때에는 아래와같은 함수사용이 가능 (함수형 컴포넌트에서는 안됨)
Mount :
ComponentDidMount
update :ComponentDidUpdate
Unmount :ComponentWillUnmount
함수형 컴포넌트를 왜 쓰나 ?
class형 컴포넌트는 함수형 컴포넌트보다 복잡하고 중복코드를 많이 쓰게 됨
const [count, setCount] = useState(0)
const [text, setText] = useState("")
useEffect(() => {
console.log("Mount!")
},[])
컴포넌트가 마운트 되는 시점에서만 콘솔이 찍힘
=> [ ] 뎁스를 빈배열로 놔두면 Mount단계에서만 작동됨
=> 버튼을 눌러서 count를 증가시키며 업데이트 될 때에는 Mount단계가 아니기때문에 안찍힘
const [count, setCount] = useState(0)
const [text, setText] = useState("")
useEffect(() => {
console.log("Update!")
})
컴포넌트가 업데이트 될 때마다 콘솔이 찍힘
=> [ ] 뎁스 사용하지 않음
=> 처음 Mount될 때 같이 콘솔 찍히고, 이후 count, text가 업데이트 될 때마다 콘솔 찍힘
const [count, setCount] = useState(0)
const [text, setText] = useState("")
useEffect(() => {
console.log(`cont is update : ${count}`)
},[count])
count가 업데이트 될 때마다 콘솔이 찍힘
=> [ ] 뎁스 안에 count(업데이트되는 대상)을 넣어줌
=> 처음 Mount될 때, count가 업데이트 될 때마다 콘솔 찍힘
const UnmountTest = () => {
useEffect(() => {
console.log('Mount!')
return () => {
// Unmount 시점에 실행되게 됨
console.log('Unmount!')
}
}, [])
return <div>Unmount Testing Component</div>
}
const Lifecycle = () => {
const [isVisible, setIsVisible] = useState(false)
const toggle = () => setIsVisible(!isVisible);
return <div style={{ padding: 20}}>
<button onClick={toggle}>ON/OFF</button>
{isVisible && <UnmountTest />}
</div>
}
useEffect 안에서 return 콜백함수
를 사용하면 Unmount시점에 실행 됨
isVisible && <UnmountTest />
: 단락회로평가공부하며 정리&기록하는 ._. 씅로그