useQuery
쿼리가 실패(쿼리 함수가 오류를 발생시킴)하면, 해당 쿼리의 요청이 최대 연속 재시도 횟수(기본값은 3
)에 도달하지 않았거나 재시도 허용 여부를 결정하는 함수가 제공된 경우 TanStack Query가 자동으로 쿼리를 재시도합니다.
재시도들은 전역 수준과 개별 쿼리 수준 모두에서 구현할 수 있습니다.
retry = false
로 설정하면 재시도가 비활성화됩니다.retry = 6
으로 설정하면 실패한 요청을 6번 재시도한 후 함수가 던진 최종 오류를 표시합니다.retry = true
로 설정하면 실패한 요청을 무한히 재시도합니다.retry = (failureCount, error) => ...
로 설정하면 요청이 실패한 이유에 따라 커스텀 로직을 사용할 수 있습니다.import { useQuery } from '@tanstack/react-query'
// Make a specific query retry a certain number of times
const result = useQuery({
queryKey: ['todos', 1],
queryFn: fetchTodoListPage,
retry: 10, // Will retry failed requests 10 times before displaying an error
})
기본적으로 TanStack 쿼리에서 재시도는 요청이 실패한 직후에 수행되지 않습니다. 표준에 따라 각 재시도 시도에 back-off 딜레이가 점진적으로 적용됩니다.
기본 retryDelay
는 각 시도마다 두 배(1000
ms부터 시작)로 설정되지만 30초를 초과할 수 없습니다:
// Configure for all queries
import {
QueryCache,
QueryClient,
QueryClientProvider,
} from '@tanstack/react-query'
const queryClient = new QueryClient({
defaultOptions: {
queries: {
retryDelay: (attemptIndex) => Math.min(1000 * 2 ** attemptIndex, 30000),
},
},
})
function App() {
return <QueryClientProvider client={queryClient}>...</QueryClientProvider>
}
권장되지는 않지만 공급자 및 개별 쿼리 옵션 모두에서 retryDelay
함수/정수를 override할 수 있습니다. 함수 대신 정수로 설정하면 지연 시간은 항상 같은 시간이 됩니다:
const result = useQuery({
queryKey: ['todos'],
queryFn: fetchTodoList,
retryDelay: 1000, // Will always wait 1000ms to retry, regardless of how many retries
})
Reference