피드로 돌아가기
Cómo solucionar el bucle infinito en useEffect con objetos y arrays
Dev.toDev.to
Frontend

Referential Equality 분석을 통한 useEffect 무한 루프 원천 차단

Cómo solucionar el bucle infinito en useEffect con objetos y arrays

Erick Eduardo Ramos2026년 5월 23일3beginner

Context

React의 useEffect가 의존성 배열 내 Object나 Array를 비교할 때 Shallow Comparison(===) 방식을 사용함에 따른 한계 발생. 상태 업데이트 시마다 새로운 메모리 주소가 할당되어 내용이 동일함에도 불구하고 지속적으로 Re-render 및 Effect가 재실행되는 무한 루프 구조의 문제점 분석.

Technical Solution

  • 의존성 배열 내 참조 타입 분석을 통한 Primitive Value 기반의 비교 구조 설계
  • 빈 의존성 배열([]) 설정을 통한 Mount 시점 1회 실행 제한으로 불필요한 상태 업데이트 제거
  • JSON.stringify 활용을 통한 Object의 Value 기반 Deep Equality 비교 구현으로 참조 무결성 문제 해결
  • useMemo를 이용한 파생 상태(Derived State) 생성을 통해 안정적인 Primitive Hash 값 기반의 트리거 설계
  • 상태 업데이트 전 조건부 검증 로직(Conditional Update) 삽입으로 불필요한 메모리 할당 및 렌더링 사이클 방지
  • complex object 처리를 위한 immer 또는 useDeepCompareEffect 라이브러리 도입을 통한 비교 로직 추상화

- useEffect 의존성 배열에 Object/Array 포함 시 참조 변경 여부 확인 - 단순 초기화 목적이라면 빈 배열([]) 사용 또는 useState 초기값 직접 지정 검토 - 복잡한 객체 비교 필요 시 Primitive 값으로 변환한 Hash 값 사용 고려 - JSON.stringify 사용 시 객체 크기에 따른 성능 오버헤드 및 Circular Reference 발생 가능성 체크

원문 읽기