본문 바로가기
Q&A해결2025년 2월 22일1분 읽기

React에서 useEffect 안에서 setState 하면 무한 루프가 발생하는 이유와 해결법

테
테크리드지망
조회 1222댓글 2

API 데이터를 가져와서 state에 저장하려는데 무한 렌더링이 발생합니다.

const [items, setItems] = useState([])
useEffect(() => {
  fetch('/api/items').then(r => r.json()).then(setItems)
}, [items]) // items가 바뀌면 다시 fetch → 또 바뀜 → 무한루프

댓글 2

김김영삼1년 전

의존성 배열에 items를 넣으면 setItems → items 변경 → useEffect 재실행 → 무한루프입니다.

// 해결: 빈 배열 = 마운트 시 1회만
useEffect(() => {
fetch('/api/items').then(r => r.json()).then(setItems)
}, []) // ← 빈 배열!

// 특정 조건에서만 재호출하려면
useEffect(() => {
fetch(`/api/items?category=${category}`)
.then(r => r.json()).then(setItems)
}, [category]) // category가 바뀔 때만

규칙: effect 안에서 변경하는 state를 의존성 배열에 넣지 마세요.

테테크리드지망(guest)1년 전
정리가 너무 깔끔해요. 북마크했습니다. 감사합니다!
Ctrl+Enter로 등록