React의 컴포넌트는 마운트(Mounting), 업데이트(Updating), 언마운트(Unmounting)라는 3단계의 라이프사이클을 가집니다. 각 단계에서는 특정 시점에 실행되는 메서드가 있어 원하는 로직을 추가할 수 있습니다.
useEffect(() => {
// 실행할 코드
}, [/* 의존성 배열 */]);
예시)
useEffect(() => {
fetch('https://api.example.com/data')
.then(response => response.json())
.then(data => setData(data));
}, []); // 빈 배열을 넣으면 컴포넌트가 마운트될 때만 실행됨
1) Mounting 단계 – 컴포넌트가 화면에 렌더링될 때
useEffect(() => {
console.log('컴포넌트가 마운트되었습니다!');
}, []);
2) Updating 단계 – 상태나 props가 변경될 때
상태나 props가 변경될 때마다 특정 작업을 실행하고 싶다면, 해당 상태나 props를 의존성 배열에 추가하면 됩니다.
useEffect(() => {
console.log(`count가 ${count}로 변경되었습니다.`);
}, [count]); // count가 변경될 때마다 실행됨
3) Unmounting 단계 – 컴포넌트가 화면에서 사라질 때
useEffect(() => {
const timer = setInterval(() => {
console.log('타이머 실행 중');
}, 1000);
return () => {
clearInterval(timer); // 컴포넌트가 언마운트될 때 타이머 정리
};
}, []);
function DataFetcher() {
const [data, setData] = useState(null);
useEffect(() => {
const fetchData = async () => {
const response = await fetch('https://api.example.com/data');
const result = await response.json();
setData(result);
};
fetchData(); // 초기 데이터 로드
const intervalId = setInterval(fetchData, 5000); // 5초마다 데이터 갱신
return () => clearInterval(intervalId); // 컴포넌트 언마운트 시 타이머 정리
}, []);
return (
<div>
<h1>데이터:</h1>
<pre>{JSON.stringify(data, null, 2)}</pre>
</div>
);
}