리액트 컴포넌트에는 생명주기가 있다.
lifecycle은 컴포넌트가 실행 - 업데이트 - 제거 될 때 각 단계에 맞춰서 발생하는 특정한 이벤트들을 말한다.
이러한 생명주기 함수를 이용해서 컴포넌트가 실행될 때 서버에서 데이터를 받아오고 - 셋팅 - 컴포넌트가 사라질 때 이벤트 리스너에 등록된 이벤트를 알아야 한다.
[lifecycle의 종류]
shouldComponentUpdate() {
console.log('Lifecycle Update shouldComponentUpdate')
return true
}
그렇다면 함수 컴포넌트에선 lifecycle을 어떻게 접근해야할까?
이 때 사용가능한 것은 useEffect이다.
useEffect는 componentDidMount, componentDidUpdate, componentWillUnmount 를 합친것과 비슷한 역할을 한다.
import React, { useEffect, useState }
from 'react' useEffect(callback, [dependency variable)
callback함수
callback의 return
dependency variable (deps)
[처음 렌더링 됐을 때만]
useEffect(() => {
// lifecycle didmount / update
pushSchedule()
}, [])
[특정 값 변경 시에만]
useEffect(() => {
// lifecycle didmount / update
pushSchedule()
}, [count])
[종료시킬 때]
useEffect(() => {
console.log("useEffect!!", count);
return () => {
// clean up
console.log("cleanup!!", count);
}
}, [count]);
//첫 렌더링 시
import React, { useEffect, useState } from 'react'
function Ex7UseEffect() {
const [count, setCount] = useState(0)
const [name, setName] = useState('')
useEffect(() => {
console.log('useEffect - Updating document title')
}, [])
return (
<div>
<input type="text" value={name} onChange={(e) => setName(e.target.value)} />
<button onClick={() => setCount(count + 1)}>Click {count} times</button>
</div>
)
}
export default Ex7UseEffect
import React, { useEffect, useState } from 'react'
function Ex7UseEffect() {
const [count, setCount] = useState(0)
const [name, setName] = useState('')
useEffect(() => {
// after render
console.log('useEffect - Updating document title')
document.title = `You clicked ${count} times`
}, [count, name])
return (
<div>
<input type="text" value={name} onChange={(e) => setName(e.target.value)} />
<button onClick={() => setCount(count + 1)}>Click {count} times</button>
</div>
)
}
export default Ex7UseEffect