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()#

public Query()

Erstellt eine Query, die ihren Cache-Client von der besitzenden Komponente auflöst (falls vorhanden).

Query(DejaClient)#

public Query(DejaClient client)

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 TypBeschreibung
IsLoading boolTrue, während irgendeine Ausführung lädt.
IsError boolTrue, 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 intWie oft die Query ausgeführt wurde.
IsReFetching boolTrue, 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 boolTrue, solange Data aus dem Cache bedient wurde und während der Subscription dieser Query noch kein frischer Fetch abgeschlossen ist.
IsStale boolTrue, wenn der beobachtete Cache-Eintrag invalidiert oder älter als die effektive Stale-Time ist (nur gecachter Pfad; ungecacht immer false).

Methoden#

Execute (keyed shorthand)#

public Task Execute(QueryKey? key, Func<CancellationToken, Task<T>> queryFunction, Action<QueryParameters<T>>? configure = null)

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)#

public Task Execute(Func<CancellationToken, Task<T>> queryFunction, Action<QueryParameters<T>>? configure = null)

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)#

public Task Execute(QueryParameters<T> parameters)

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#

public Task Refetch(RefetchParameters<T>? parameters = null)

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#

public void 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)#

public void ClearData(bool cancelCurrentRequest)

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#

public void 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.