Framework
Version

Query-Wiederholungen

Wenn eine useQuery-Abfrage fehlschlägt (die Abfragefunktion löst einen Fehler aus), versucht TanStack Query die Abfrage automatisch erneut, wenn die Anfrage für diese Abfrage das maximale Limit aufeinanderfolgender Wiederholungsversuche (standardmäßig 3) noch nicht erreicht hat oder wenn eine Funktion bereitgestellt wird, um zu bestimmen, ob ein Wiederholungsversuch zulässig ist.

Sie können Wiederholungsversuche sowohl auf globaler Ebene als auch auf individueller Abfrageebene konfigurieren.

  • Wenn Sie retry = false setzen, werden Wiederholungsversuche deaktiviert.
  • Wenn Sie retry = 6 setzen, werden fehlgeschlagene Anfragen 6 Mal wiederholt, bevor der endgültige Fehler angezeigt wird, der von der Funktion ausgelöst wurde.
  • Wenn Sie retry = true setzen, werden fehlgeschlagene Anfragen unendlich oft wiederholt.
  • Wenn Sie retry = (failureCount, error) => ... setzen, können Sie benutzerdefinierte Logik basierend darauf implementieren, warum die Anfrage fehlgeschlagen ist.

Auf dem Server sind Wiederholungsversuche standardmäßig auf 0 eingestellt, um das Server-Rendering so schnell wie möglich zu gestalten.

tsx
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
})
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
})

Info: Der Inhalt der error-Eigenschaft wird bis zum letzten Wiederholungsversuch Teil der failureReason-Antwort-Eigenschaft von useQuery sein. Im obigen Beispiel sind alle Fehlerinhalte für die ersten 9 Wiederholungsversuche (insgesamt 10 Versuche) Teil der failureReason-Eigenschaft und schließlich werden sie Teil von error sein, wenn der Fehler nach allen Wiederholungsversuchen weiterhin besteht.

Wiederholungsversuch-Verzögerung

Standardmäßig finden Wiederholungsversuche in TanStack Query nicht unmittelbar nach einem fehlgeschlagenen Anfrage statt. Wie üblich wird jeder Wiederholungsversuch schrittweise mit einer Backoff-Verzögerung versehen.

Die Standard- retryDelay ist so eingestellt, dass sie sich mit jedem Versuch verdoppelt (beginnend bei 1000ms), aber 30 Sekunden nicht überschreitet.

tsx
// 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>
}
// 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>
}

Obwohl es nicht empfohlen wird, können Sie die retryDelay-Funktion/Integer sowohl in den Provider- als auch in den einzelnen Abfrageoptionen überschreiben. Wenn Sie stattdessen einen Integer anstelle einer Funktion festlegen, ist die Verzögerung immer gleich lang.

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