⚛️ useEffect란?
useEffect는 React 함수형 컴포넌트에서 부수효과(Side Effect) 를 처리하기 위한 훅(Hook)입니다.
예를 들어 다음과 같은 동작이 모두 “부수효과”에 해당해요 👇
- 📡 API 호출 (데이터 가져오기)
- ⏱️ 타이머/인터벌 설정
- 📦 로컬스토리지 접근
- 📍 DOM 직접 조작
- 🧹 구독 해제나 리소스 정리(cleanup)
즉, 렌더링만으로는 해결되지 않는 외부 동작을 처리할 때 useEffect를 사용합니다.
useEffect(() => {
// 이 안에서 부수효과 실행
return () => {
// (선택) cleanup: 컴포넌트가 사라질 때 실행
};
}, [dependency]);
- 첫 번째 인자: 실행할 함수
- return 부분: cleanup (선택 사항)
- 두 번째 인자 []: 의존성 배열 → 언제 실행할지 제어
📌 예제 1 – 컴포넌트가 처음 렌더링될 때 1회 실행
import React, { useState, useEffect } from "react";
function Welcome() {
const [message, setMessage] = useState("로딩 중...");
useEffect(() => {
// ✅ 마운트 시 한 번만 실행
setTimeout(() => {
setMessage("안녕하세요! 👋");
}, 1500);
}, []); // ← 의존성 배열이 빈 배열이면 '처음 한 번만'
return <h2>{message}</h2>;
}
export default Welcome;
📍 동작
- 컴포넌트가 처음 렌더링될 때만 setTimeout() 실행
- 1.5초 후 메시지가 업데이트되고 화면이 다시 렌더링됨
📌 예제 2 – 상태 변화마다 실행
import React, { useState, useEffect } from "react";
function Counter() {
const [count, setCount] = useState(0);
useEffect(() => {
console.log(`📢 카운트가 ${count}로 변경됨`);
}, [count]); // count가 바뀔 때마다 실행됨
return (
<div>
<p>현재 카운트: {count}</p>
<button onClick={() => setCount(count + 1)}>+1</button>
</div>
);
}
export default Counter;
📍 동작
- count 상태가 변경될 때마다 useEffect 안의 함수 실행
- 콘솔에 새로운 값 로그 출력
📌 예제 3 – 타이머 사용 + 정리(cleanup)
import React, { useState, useEffect } from "react";
function Timer() {
const [sec, setSec] = useState(0);
useEffect(() => {
const id = setInterval(() => setSec(s => s + 1), 1000);
console.log("⏱️ 타이머 시작");
// ✅ cleanup: 컴포넌트가 사라질 때 실행
return () => {
clearInterval(id);
console.log("🧹 타이머 정리 완료");
};
}, []); // 마운트 시 1회 실행
return <h2>⏱️ {sec}초 경과</h2>;
}
export default Timer;
📍 동작
- 컴포넌트가 처음 나타날 때 setInterval 시작
- 1초마다 sec 상태 증가 → UI 자동 갱신
- 컴포넌트가 사라질 때 clearInterval()로 메모리 누수 방지
✅ 정리
useEffect(() => {...}, []) | 마운트 시 1회만 실행 | 최초 렌더링 |
useEffect(() => {...}, [state]) | 특정 상태/props가 바뀔 때 실행 | 의존성 변경 시 |
return () => {...} | 정리(cleanup) 함수 | 언마운트 또는 재실행 전 |
'REACT' 카테고리의 다른 글
[REACT] 문자열함수(JAVASCRIPT) (0) | 2025.10.03 |
---|---|
[REACT] fatch, axios 사용법 (0) | 2025.09.28 |
[REACT] USESTATE 변수관리법 (0) | 2025.09.28 |
[REACT] 핵심특징 7가지 (0) | 2025.09.28 |