본문 바로가기

WEB개발/REACT

[hook] useQuery

 

options

useQuery({
  queryKey,
  queryFn,
  enabled,
  staleTime,
  gcTime,
  retry,
  retryDelay,
  refetchOnWindowFocus,
  refetchOnReconnect,
  refetchOnMount,
  refetchInterval,
  refetchIntervalInBackground,
  initialData,
  placeholderData,
  select,
  structuralSharing,
  meta,
  networkMode,
  queryHash,
})

 

 

 1) queryKey (필수)

더보기

Query 캐시 식별자.


`queryKey: ['user', userId]`

키가 같으면 캐시를 재사용

배열 형태 권장


 

  2) queryFn (필수)

더보기

데이터를 가져오는 함수.

`queryFn: () => axios.get('/api/user')`



3) enabled (조회 ON/OFF)

더보기

false면 자동 실행 안 됨 → 조건부 요청에 필수.

`enabled: !!userId`



4) staleTime (신선한 상태 유지 시간)

더보기

단위: ms
데이터가 "신선한" 것으로 간주되는 시간 → 이 동안은 재요청 안 함

`staleTime: 1000 * 60`  // 1분

기본: 0ms → 항상 stale → 포커스 이동 시 재요청



5) gcTime (가비지 컬렉션 유지 시간)

더보기

stale 캐시가 언마운트 후 사라지기까지의 캐시 보관 시간

staleTime과 같은 기능 하지만 메모리의 데이터를 삭제하는점이 다름

`gcTime: 5 * 60 * 1000` // 5분


React Query v4 기준 cacheTime → v5에서는 gcTime.


 

필요  기능설정
컴포넌트 나가면 캐시 즉시 삭제 gcTime: 0
컴포넌트 벗어나든 말든 항상 API 새로 호출 gcTime: 0 + staleTime: 0 + refetchOnMount: 'always'
캐시 자체를 완전히 안 쓰는 느낌으로 동작 gcTime: 0 + staleTime: 0

6) retry (재시도 횟수)

더보기

기본값: 3

retry: 2          // 최대 2번 재시도
retry: false      // 재시도 X
retry: (failCount, err) => failCount < 2


 

7) retryDelay (재시도 간격)

더보기

retryDelay: attemptIndex => attemptIndex * 1000,



8) refetchOnWindowFocus (포커스 시 재요청)

더보기

기본값: true
refetchOnWindowFocus: false

SPA에서는 보통 꺼서 UX 개선.


 

9) refetchOnReconnect (네트워크 다시 연결되면 재요청)

더보기

기본: true



10) refetchOnMount (컴포넌트 마운트 시 재요청)

더보기

기본값: "always"

설정 예:
`refetchOnMount: false`



11) refetchInterval (폴링)

더보기

주기적으로 데이터 다시 받기.

refetchInterval: 5000  // 5초마다 재요청


 

12) refetchIntervalInBackground

더보기

탭이 background여도 폴링 유지.

refetchIntervalInBackground: true



13) initialData (최초 로딩시 임시 데이터)

더보기

서버 요청 전 임시 값.

initialData: () => [{ id: 1, name: 'temp' }]



14) placeholderData (로딩 중 화면용 데이터)

더보기

Skeleton 역할, 실제 캐시에 저장되지 않음.

placeholderData: []



15) select (데이터 변환)

더보기

응답 데이터를 가공해서 리턴.

`select: (data) => data.items`
캐시에는 원본 그대로 저장되며, select는 “표현용”.



16) structuralSharing (구조적 공유)

더보기

객체 비교 시 deep compare 최적화
기본값: true

 

이전 캐시:
{ user: { name: "Tom", age: 20 } }

새 응답:
{ user: { name: "Tom", age: 21 } }

→ 생성 결과:
user: { name: (기존 객체 그대로), age: (새 값) }

 

=> React 리렌더도 최소화됨



17) meta (메타데이터)

더보기

미들웨어 또는 DevTools용 정보 저장용

meta: { authRequired: true }



18) networkMode (네트워크없을 때 동작)

더보기

"online" (기본)

"always": 오프라인에서도 실행

"offlineFirst"

예: `networkMode: 'offlineFirst'`


 




exact

옵션 의미
exact: true 쿼리 키가 완전히 같은 경우만 무효화
exact: false (기본값) 쿼리 키가 부분 일치하는 것까지 전부 무효화

 

queryClient.invalidateQueries({
  queryKey: ['todos'],
});

 

✅ 전부 무효화됨

  • ['todos']
  • ['todos', 1]
  • ['todos', { status: 'done' }]

['todos']로 시작하는 모든 쿼리

'WEB개발 > REACT' 카테고리의 다른 글

[hook] useCallback  (0) 2025.12.16
[hook] useEffect  (0) 2025.12.16
VITE  (0) 2025.03.17
React, Vite, Typescript 참고, 오류  (0) 2025.02.20
[환경구성] React개발을 위한 유용한 노드모듈 (node_modules)  (0) 2025.02.14