API로부터 데이터를 받아와 상태를 업데이트하고, 해당 상태를 기반으로 다시 필터링 로직을 수행하려 합니다.
코드:
import React, { useState, useEffect } from 'react';
export default function DataComponent() {
const [data, setData] = useState([]);
const [filteredData, setFilteredData] = useState([]);
useEffect(() => {
setData([1, 2, 3, 4, 5]);
}, []);
useEffect(() => {
const filtered = data.filter(item => item > 2);
setFilteredData(filtered);
}, [data]);
return <div>{filteredData.length}</div>;
}
오류: Error: Maximum update depth exceeded. This can happen when a component repeatedly renders without stopping.
시도: useEffect의 의존성 배열을 빈 배열로 설정하거나, setData 호출 시점을 변경함.
질문: 위 코드 구조에서 data 상태 변경이 어떻게 무한 렌더링을 유발하며, 이를 방지하기 위한 최적의 상태 관리 방법은 무엇입니까?
댓글5
-
빗방울
2026.10.30 02:47
-
빗방울
2026.10.30 04:28
ㄹㅇ 인정함
상태 너무 많이 만들면 관리도 빡세고 꼬이기 십상임ㅋㅋ
그냥 계산된 값으로 처리하는 게 정신건강에 좋음
-
빗방울
2026.10.30 06:59
ㄹㅇ 이게 정답임
상태 쪼개다가 꼬이면 답도 없는데
그냥 변수로 빼는 게 제일 속 편함ㅋㅋ
-
빗방울
2026.10.30 07:04
근데 이 코드만 봐서는 무한루프 안 돌 것 같은데 ㄷㄷ
혹시 다른 데서 data 상태 건드리는 로직 더 있는 거 아님?
원래 코드면 그냥 렌더링 두 번 하고 끝날 텐데 이상하네요ㅋㅋ
-
빗방울
2026.10.30 09:46
ㄹㅇ 저도 그 생각함ㅋㅋ 아마 생략된 코드 중에 data를 다시 set하는 로직이 숨어있을 듯ㄷㄷ
모든 이야기1464
가벼운 안부부터 깊은 생각까지, 함께 나눠요.
총 1464개의 이야기
굳이 상태로 안 만들고 useMemo 쓰는 게 답인듯.
필터링 결과는 그냥 변수로 처리하세요.
그게 훨씬 깔끔함ㅋㅋ