TanStack Query bietet drei verschiedene Netzwerkmodi, um zu unterscheiden, wie sich Queries und Mutations verhalten sollen, wenn Sie keine Netzwerkverbindung haben. Dieser Modus kann für jede einzelne Query / Mutation festgelegt oder global über die Standardwerte für Queries / Mutations eingestellt werden.
Da TanStack Query am häufigsten für das Abrufen von Daten in Kombination mit Datenabrufbibliotheken verwendet wird, ist der Standard-Netzwerkmodus online.
In diesem Modus werden Queries und Mutations nicht ausgelöst, es sei denn, Sie haben eine Netzwerkverbindung. Dies ist der Standardmodus. Wenn ein Fetch für eine Query initiiert wird, bleibt diese immer in dem state (pending, error, success), in dem sie sich befindet, wenn der Fetch nicht durchgeführt werden kann, da keine Netzwerkverbindung besteht. Es wird jedoch zusätzlich ein fetchStatus bereitgestellt. Dieser kann entweder
Die Flags isFetching und isPaused werden aus diesem Status abgeleitet und zur Bequemlichkeit bereitgestellt.
Beachten Sie, dass es möglicherweise nicht ausreicht, den pending-Status zu überprüfen, um eine Ladeanzeige anzuzeigen. Queries können im state: 'pending' sein, aber fetchStatus: 'paused', wenn sie zum ersten Mal gemountet werden und keine Netzwerkverbindung besteht.
Wenn eine Query ausgeführt wird, weil Sie online sind, aber offline gehen, während der Fetch noch stattfindet, wird TanStack Query auch den Wiederholungsmechanismus pausieren. Pausierte Queries werden dann fortgesetzt, sobald Sie wieder eine Netzwerkverbindung haben. Dies ist unabhängig von refetchOnReconnect (das in diesem Modus standardmäßig auf true gesetzt ist), da es sich nicht um ein refetch, sondern um ein continue handelt. Wenn die Query inzwischen abgebrochen wurde, wird sie nicht fortgesetzt.
In diesem Modus ruft TanStack Query immer ab und ignoriert den Online-/Offline-Status. Dies ist wahrscheinlich der Modus, den Sie wählen möchten, wenn Sie TanStack Query in einer Umgebung verwenden, in der Sie keine aktive Netzwerkverbindung benötigen, damit Ihre Queries funktionieren. z. B. wenn Sie nur aus AsyncStorage lesen, oder wenn Sie einfach nur Promise.resolve(5) aus Ihrer queryFn zurückgeben möchten.
Dieser Modus ist der Mittelweg zwischen den ersten beiden Optionen, bei dem TanStack Query die queryFn einmal ausführt, aber dann Wiederholungsversuche pausiert. Dies ist sehr praktisch, wenn Sie einen ServiceWorker haben, der eine Anfrage zur Zwischenspeicherung abfängt, wie in einer Offline-First-PWA, oder wenn Sie HTTP-Caching über den Cache-Control-Header verwenden.
In diesen Situationen kann der erste Abruf erfolgreich sein, da er aus einem Offline-Speicher / Cache stammt. Wenn es jedoch zu einem Cache-Fehler kommt, wird die Netzwerkanfrage gesendet und schlägt fehl, in welchem Fall sich dieser Modus wie eine online-Query verhält - Wiederholungsversuche werden pausiert.
Die TanStack Query Devtools zeigen Queries im Zustand paused an, wenn sie fetchen würden, aber keine Netzwerkverbindung besteht. Es gibt auch eine Umschalttaste, um das Offline-Verhalten zu simulieren. Bitte beachten Sie, dass diese Taste Ihre Netzwerkverbindung nicht tatsächlich beeinflusst (das können Sie in den Browser-Entwicklertools tun), aber sie versetzt den OnlineManager in einen Offline-Zustand.