Query<T>
Verfolgt einen einzelnen asynchronen Lesevorgang und stellt seinen Lebenszyklus als bindbaren Zustand bereit; bei jedem Fortschritt benachrichtigt sie den angehängten Listener, damit die besitzende Komponente neu rendern kann.
public class Query<T> : DejaObservable, IDisposable
Ein neuerer Execute verdrängt einen älteren laufenden (und bricht ihn ab), und
parallele Aufrufe mit demselben Key schließen sich derselben Ausführung an, statt zweimal zu
fetchen. Erbe in der besitzenden Komponente von
DejaComponentBase, und das Anhängen wird für dich
erledigt.
Konstruktoren#
Query()#
Erstellt eine Query, die ihren Cache-Client von der besitzenden Komponente auflöst (falls vorhanden).
Query(DejaClient)#
Erstellt eine Query, die an client gebunden ist — für den Einsatz außerhalb
einer Komponente. Wirft eine ArgumentNullException, wenn
client null ist.
Zustand#
| Member | Typ | Beschreibung |
|---|---|---|
| IsLoading | bool | True, während irgendeine Ausführung lädt. |
| IsError | bool | True, wenn die jüngste Ausführung fehlgeschlagen ist. Ein erfolgreicher Refetch setzt es zurück. |
| ErrorMessage | string? | Die Fehlermeldung der jüngsten Ausführung, wenn IsError true ist. |
| Data | T? | Die zuletzt geladenen Daten. |
| ReFetchCount | int | Wie oft die Query ausgeführt wurde. |
| IsReFetching | bool | True, während eine Ausführung nach der ersten lädt. Für dezente Aktualisierungs-Indikatoren. |
| UpdatedAt | DateTimeOffset? | Wann die aktuellen Data geladen wurden (nur gecachter Pfad); null auf dem ungecachten Pfad oder vor dem ersten Ergebnis. |
| IsCachedData | bool | True, solange Data aus dem Cache bedient wurde und während der Subscription dieser Query noch kein frischer Fetch abgeschlossen ist. |
| IsStale | bool | True, wenn der beobachtete Cache-Eintrag invalidiert oder älter als die effektive Stale-Time ist (nur gecachter Pfad; ungecacht immer false). |
Methoden#
Execute (keyed shorthand)#
Führt eine Query mit Key aus — die Kurzform für den häufigen Fall, äquivalent zur vollen
Form mit gesetztem QueryKey und QueryFunction, alles Weitere
konfiguriert der Hook. Ein String konvertiert implizit zu einem Key; übergib
null für den ungecachten Pfad. Wirft eine
ArgumentNullException, wenn queryFunction null ist.
_todos.Execute("todos", Api.GetTodosAsync);Execute (unkeyed shorthand)#
Führt eine Query ohne Key aus — ein Fetch, der den Cache nie berührt und bei dem ein neuerer Aufruf einen älteren laufenden verdrängt (und abbricht).
Execute (full form)#
Führt die durch parameters beschriebene Query aus. Mit Key und
DejaClient läuft der gemeinsame Cache-Pfad: Gecachte Daten
rendern sofort, die Aktualität entscheidet, ob im Hintergrund neu geladen wird, und
parallele Aufrufe mit demselben Key aus beliebigen Komponenten schließen sich einem
laufenden Fetch an. Mit Key, aber ohne Client, schließt sich ein paralleler Aufruf mit
demselben Key auf dieser Instanz der laufenden Ausführung an. Ohne Key verdrängt ein
neuerer Aufruf den älteren. No-op, wenn parameters null oder die Query
disposed ist.
Refetch#
Führt das letzte Execute mit erzwungenem frischem Fetch erneut aus:
Aktualität, RefetchOnMount und Enabled werden übergangen — ein
manueller Refetch ist eine explizite Anforderung, keine Mount-Policy. Auf dem gecachten
Pfad aktualisiert das Ergebnis den gemeinsamen Eintrag, sodass jede Komponente auf dem
Key neu rendert. Überschreibungen in
RefetchParameters<T> gelten nur für diesen
Aufruf. Tut nichts vor dem ersten Execute oder nach dem Disposen.
ClearData#
Setzt den Zustand der Query zurück (Daten, Fehler, Zähler), ohne eine laufende Ausführung
abzubrechen. Zurückgesetzt wird nur die Sicht dieser Query — ein von ihr beobachteter
Cache-Eintrag bleibt unberührt, das nächste Execute mit Key liefert also
wieder die gecachten Daten; nutze DejaClient.Remove, um den Eintrag selbst
zu entfernen.
ClearData(bool)#
Wie oben; ist cancelCurrentRequest true, wird zusätzlich die laufende
Ausführung abgebrochen, ohne die Query zu disposen — sie kann also weiterhin ausgeführt
werden.
Dispose#
Bricht eine laufende Ausführung ab. DejaComponentBase ruft das für die Queries einer Komponente auf; Wegnavigieren bricht den Request (und die Server-Query) ab, statt ihn zu Ende laufen zu lassen.
Fehlerkontrakt#
Eine fehlschlagende Ausführung veröffentlicht IsError/ErrorMessage
und führt die Fehler-Callbacks aus; eine InvalidOperationException, die die
ursprüngliche Exception umschließt, wird nur geworfen, wenn kein Fehler-Callback sie
beobachtet hat. Abbruch (Verdrängung oder Disposal) ist kein Fehler: kein Fehlerzustand,
keine Callbacks. Siehe den
Guide zur Fehlerbehandlung.