Development/React

[React] ReactQuery 순환 참조

곽진돔 2025. 6. 9. 17:57
JavaScript 객체 초기화 순서와 const 객체 참조 구조 때문에 생기는 “실행 시점 의존성” 문제

객체 리터럴 내부에서 자기 자신 참조는 시점상 정의 전 참조가 된다.

 

export const pageMngQueryKeys = {
  all: ['pageMng'] as const,
  detail: (id: number) =>
    [...pageMngQueryKeys.all, 'detail', id] as const,
};

여기서 pageMngQueryKeys.detail객체 초기화가 아직 끝나지 않은 시점에 pageMngQueryKeys.all을 참조

 

즉, pageMngQueryKeys는 아직 완전히 만들어지지 않았는데 그걸 내부에서 쓰고 있음 → undefined.all → 런타임 에러

 

왜 로컬환경에선 안되고 개발계에선 될까

아마도 아래 이유 중 하나?

Vite 개발 서버 (HMR) 모듈 캐시가 살아있어서 간혹 우연히 동작함
프로덕션 빌드 정적 분석에서 warning 또는 undefined 가능성
Jest 등 테스트 거의 확정적으로 undefined 발생
Node.js ESM 직접 실행 순환 의존으로 함수 호출 시점에 터짐

Vite 모듈 캐시가 살아있어서 그런듯 하다.

 

export const pageMngQueryKeys = {
  ...
  detail: (pageId: number) => ['pageMng', 'detail', pageId] as const,
};

 

기존 담당자가 수정하고 테스트했을 땐 캐시 때문에 정상 동작했던 것 같다.