Framework
Version

Netzwerkmodus

TanStack Query bietet drei verschiedene Netzwerkmodi, um zu unterscheiden, wie Queries und Mutations sich verhalten sollen, wenn keine Netzwerkverbindung besteht. Dieser Modus kann für jede Abfrage / Mutation einzeln oder global über die Abfrage- / Mutationsstandards festgelegt werden.

Da TanStack Query am häufigsten für das Abrufen von Daten in Kombination mit Datenabrufbibliotheken verwendet wird, ist der Standard-Netzwerkmodus online.

Netzwerkmodus: online

In diesem Modus werden Abfragen und Mutationen nicht ausgelöst, es sei denn, Sie haben eine Netzwerkverbindung. Dies ist der Standardmodus. Wenn ein Abruf für eine Abfrage eingeleitet wird, bleibt diese immer in dem Zustand (ausstehend, Fehler, Erfolg), in dem sie sich befindet, wenn der Abruf nicht erfolgen kann, da keine Netzwerkverbindung besteht. Zusätzlich wird jedoch ein fetchStatus verfügbar gemacht. Dieser kann entweder

  • fetching: Die queryFn wird tatsächlich ausgeführt - eine Anfrage ist in Bearbeitung.
  • paused: Die Query wird nicht ausgeführt - sie ist paused, bis Sie wieder eine Verbindung haben.
  • idle: Die Query ruft nicht ab und ist nicht pausiert.

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 Abfrage ausgeführt wird, weil Sie online sind, Sie aber offline gehen, während der Abruf noch stattfindet, wird TanStack Query auch den Wiederholungsmechanismus pausieren. Pausierte Abfragen werden dann fortgesetzt, sobald Sie die Netzwerkverbindung wiederhergestellt haben. Dies ist unabhängig von refetchOnReconnect (das in diesem Modus standardmäßig auf true gesetzt ist), da es sich nicht um einen Neuerfassungsversuch, sondern um eine Fortsetzung handelt. Wenn die Abfrage in der Zwischenzeit abgebrochen wurde, wird sie nicht fortgesetzt.

Netzwerkmodus: always

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.

  • Queries werden niemals paused, weil Sie keine Netzwerkverbindung haben.
  • Wiederholungsversuche werden ebenfalls nicht pausiert - Ihre Query geht in den error-Status, wenn sie fehlschlägt.
  • refetchOnReconnect ist standardmäßig false in diesem Modus, da das erneute Herstellen der Verbindung zum Netzwerk kein guter Indikator mehr dafür ist, dass veraltete Queries erneut abgerufen werden sollten. Sie können ihn bei Bedarf trotzdem aktivieren.

Netzwerkmodus: offlineFirst

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.

Devtools

Die TanStack Query Devtools zeigen Abfragen im Zustand pausiert an, wenn sie abrufen würden, aber keine Netzwerkverbindung besteht. Es gibt auch eine Umschalttaste, um Offline-Verhalten zu simulieren. Bitte beachten Sie, dass diese Schaltfläche Ihre Netzwerkverbindung *nicht* tatsächlich beeinträchtigt (das können Sie in den Browser-Entwicklertools tun), sondern den OnlineManager in einen Offline-Zustand versetzt.

Signatur

  • networkMode: 'online' | 'always' | 'offlineFirst'
    • optional
    • standardmäßig 'online'