1. 핵심 Hooks
함수 | 용도 | 주요 반환값 | 주요 옵션 |
---|
useQuery | 데이터 조회 (GET) | data , isLoading , isError , error , isFetching , refetch | queryKey , queryFn , enabled , staleTime , gcTime , retry , select |
useMutation | 데이터 변경 (POST/PUT/DELETE) | mutate , mutateAsync , isPending , isSuccess , isError , data , reset | mutationFn , onSuccess , onError , onMutate , onSettled |
useInfiniteQuery | 무한 스크롤/페이지네이션 | data , fetchNextPage , fetchPreviousPage , hasNextPage , hasPreviousPage , isFetchingNextPage | queryKey , queryFn , initialPageParam , getNextPageParam , getPreviousPageParam |
useQueryClient | QueryClient 인스턴스 접근 | queryClient 객체 | – |
useSuspenseQuery | Suspense와 함께 사용 | data (항상 존재) | useQuery와 동일 |
useQueries | 여러 쿼리 동시 실행 | 쿼리 결과 배열 | queries 배열 |
useIsFetching | 현재 fetching 중인 쿼리 수 | 숫자 | queryKey , filters |
useIsMutating | 현재 mutating 중인 개수 | 숫자 | mutationKey , filters |
2. QueryClient 메서드
캐시 관리
메서드 | 용도 | 예시 |
---|
invalidateQueries | 쿼리를 stale로 만들고 리페치 | queryClient.invalidateQueries({ queryKey: ['todos'] }) |
refetchQueries | 쿼리 즉시 리페치 | queryClient.refetchQueries({ queryKey: ['todos'] }) |
cancelQueries | 진행 중인 쿼리 취소 | queryClient.cancelQueries({ queryKey: ['todos'] }) |
removeQueries | 쿼리를 캐시에서 제거 | queryClient.removeQueries({ queryKey: ['todos'] }) |
resetQueries | 쿼리를 초기 상태로 리셋 | queryClient.resetQueries({ queryKey: ['todos'] }) |
clear | 모든 캐시 제거 | queryClient.clear() |
데이터 조회/설정
메서드 | 용도 | 예시 |
---|
getQueryData | 캐시에서 데이터 읽기 | queryClient.getQueryData(['todos']) |
setQueryData | 캐시 데이터 직접 수정 | queryClient.setQueryData(['todos'], newData) |
getQueryState | 쿼리 상태 가져오기 | queryClient.getQueryState(['todos']) |
setQueryDefaults | 쿼리 기본 옵션 설정 | queryClient.setQueryDefaults(['todos'], { staleTime: 10000 }) |
getQueriesData | 여러 쿼리 데이터 가져오기 | queryClient.getQueriesData({ queryKey: ['todos'] }) |
setQueriesData | 여러 쿼리 데이터 설정 | queryClient.setQueriesData({ queryKey: ['todos'] }, updater) |
Prefetching
메서드 | 용도 | 예시 |
---|
prefetchQuery | 데이터 미리 가져오기 (Promise 반환) | await queryClient.prefetchQuery({ queryKey: ['todos'], queryFn }) |
prefetchInfiniteQuery | 무한 쿼리 미리 가져오기 | await queryClient.prefetchInfiniteQuery({ queryKey, queryFn }) |
ensureQueryData | 캐시에 없으면 fetch, 있으면 반환 | const data = await queryClient.ensureQueryData({ queryKey, queryFn }) |
3. 주요 옵션
useQuery 옵션
옵션 | 타입 | 기본값 | 설명 |
---|
queryKey | unknown[] | 필수 | 쿼리의 고유 키 |
queryFn | () => Promise<T> | 필수 | 데이터를 가져오는 함수 |
enabled | boolean | true | false면 쿼리 자동 실행 안 됨 |
staleTime | number | 0 | 데이터가 fresh 상태로 유지되는 시간 (ms) |
gcTime | number | 5분 | 캐시 보관 시간 (구 cacheTime) |
retry | boolean | number | function | 3 | 실패 시 재시도 횟수 |
retryDelay | number | function | 지수 증가 | 재시도 간격 |
refetchOnMount | boolean | "always" | true | 마운트 시 리페치 여부 |
refetchOnWindowFocus | boolean | "always" | true | 윈도우 포커스 시 리페치 |
refetchOnReconnect | boolean | "always" | true | 재연결 시 리페치 |
refetchInterval | number | false | false | 주기적 리페치 간격 (ms) |
select | (data: T) => U | undefined | 데이터 변환 함수 |
placeholderData | T | function | undefined | 로딩 중 표시할 임시 데이터 |
initialData | T | function | undefined | 초기 데이터 (캐시에 저장됨) |
useMutation 옵션
옵션 | 타입 | 설명 |
---|
mutationFn | (variables) => Promise<T> | mutation 실행 함수 (필수) |
mutationKey | unknown[] | mutation의 고유 키 |
onMutate | (variables) => Promise<Context> | Context | mutation 시작 전 실행 (낙관적 업데이트) |
onSuccess | (data, variables, context) => void | 성공 시 콜백 |
onError | (error, variables, context) => void | 실패 시 콜백 |
onSettled | (data, error, variables, context) => void | 성공/실패 후 항상 실행 |
retry | boolean | number | 재시도 횟수 |
retryDelay | number | function | 재시도 간격 |
4. 상태 플래그
useQuery 상태
플래그 | 타입 | 설명 |
---|
status | 'pending' | 'error' | 'success' | 쿼리 상태 |
fetchStatus | 'fetching' | 'paused' | 'idle' | fetch 상태 |
isLoading | boolean | 처음 로딩 중 (isPending && isFetching ) |
isPending | boolean | 아직 데이터가 없음 |
isSuccess | boolean | 성공적으로 데이터 로드 |
isError | boolean | 에러 발생 |
isFetching | boolean | 현재 fetching 중 (백그라운드 포함) |
isStale | boolean | 데이터가 stale 상태 |
isPlaceholderData | boolean | placeholder 데이터 표시 중 |
useMutation 상태
플래그 | 타입 | 설명 |
---|
status | 'idle' | 'pending' | 'error' | 'success' | mutation 상태 |
isIdle | boolean | 아직 실행 안 됨 |
isPending | boolean | 실행 중 |
isSuccess | boolean | 성공 |
isError | boolean | 실패 |
data | T | mutation 결과 데이터 |
error | Error | 에러 객체 |
5. 유틸리티 함수
함수 | 용도 | 예시 |
---|
hashKey | queryKey를 해시로 변환 | import { hashKey } from '@tanstack/react-query' |
matchQuery | 쿼리 매칭 | filters에서 사용 |
matchMutation | mutation 매칭 | filters에서 사용 |
6. 필터 옵션
invalidateQueries, refetchQueries 등에서 사용:
필터 | 타입 | 설명 |
---|
queryKey | unknown[] | 특정 쿼리 키 매칭 |
exact | boolean | 정확히 일치하는 쿼리만 |
predicate | (query) => boolean | 커스텀 매칭 함수 |
type | 'active' | 'inactive' | 'all' | 쿼리 타입 필터 |
stale | boolean | stale 상태 필터 |
fetchStatus | 'fetching' | 'paused' | 'idle' | fetch 상태 필터 |