react-query v4 공식문서 : Query Retries

👾·2022년 8월 11일
0

react-query

목록 보기
12/27
post-thumbnail

공식문서 : https://tanstack.com/query/v4/docs/guides/query-retries

Query Retries

useQuery 쿼리가 실패하면(쿼리함수가 error를 throw), 해당 쿼리의 요청이 최대 연속 재시도 횟수에 도달하지 않았거나(기본값은 3) 재시도 허용 여부를 결정하는 함수가 제공되면 React Query는 쿼리를 자동으로 재시도한다.

전역 수준과 개별 쿼리 수준에서 모두 retry를 설정할 수 있다.

  • retry = false 설정은 retry를 비활성화한다.
  • retry = 6 설정은 함수에서 발생한 최종 error를 표시하기 전에 실패한 요청을 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(['todos', 1], fetchTodoListPage, {
  retry: 10, // Will retry failed requests 10 times before displaying an error
})

Retry Delay

기본적으로 React Query에서 retry는 요청이 실패한 직후에 발생하지 않는다. 표준에 따라 back-off delay가 각 retry시마다 점진적으로 적용된다.

retryDelay의 기본값은 각 시도마다 두배(1000ms에서 시작)로 설정되지만 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>
}

권장되지는 않지만, Provider 및 개별 쿼리 옵션 모두에서 retryDelay 함수/정수를 재정의할 수 있다. 함수 대신 정수가 설정된 경우에는 delay시간은 항상 동일하다. :

const result = useQuery(['todos'], fetchTodoList, {
  retryDelay: 1000, // Will always wait 1000ms to retry, regardless of how many retries
})

0개의 댓글