Enums & unterstützende Typen

Die kleineren öffentlichen Typen: Enums, Filter, der Cache-Schnappschuss, die für Endnutzer bestimmte Exception und der Observable-Vertrag.

RefetchOnMount#

RefetchOnMount#

public enum RefetchOnMount { Never, IfStale, Always }

Steuert, ob ein Execute mit Key, das gecachte Daten vorfindet, zusätzlich im Hintergrund neu lädt. Ein Key ohne gecachte Daten fetcht immer, unabhängig von dieser Einstellung.

Wert TypBeschreibung
Never 0Bedient den Cache und lädt beim Mount nie neu. Invalidierung lädt weiterhin neu.
IfStale 1Lädt nur dann im Hintergrund neu, wenn die Daten älter als die Stale-Time sind.
Always 2Lädt immer im Hintergrund neu, selbst wenn die Daten noch frisch sind.

RefetchType#

RefetchType#

public enum RefetchType { Active, All, None }

Welche invalidierten Einträge sofort neu laden.

Wert TypBeschreibung
Active 0Lädt Einträge mit aktiven Subscribern neu; Einträge ohne bleiben als stale markiert und laden neu, sobald die nächste Komponente auf ihnen mountet.
All 1Lädt jeden passenden Eintrag neu, abonniert oder nicht.
None 2Markiert Einträge nur als stale; bis zum nächsten Mount lädt nichts neu.

InvalidateOptions#

InvalidateOptions#

public sealed class InvalidateOptions { public bool Exact { get; set; } public Func<QueryKey, bool>? Predicate { get; set; } public RefetchType RefetchType { get; set; } = RefetchType.Active; }

Optionen für DejaClient.InvalidateAsync. Mit Exact false (dem Default) passt der Key per Präfix — wer ["todos"] invalidiert, invalidiert auch ["todos", 1]. Predicate filtert die passenden Keys weiter.

QueryFilter#

QueryFilter#

public sealed class QueryFilter { public bool Exact { get; set; } public Func<QueryKey, bool>? Predicate { get; set; } }

Schränkt ein, welche Einträge ein Key in DejaClient.Remove und DejaClient.RefetchAsync trifft. Standardmäßig Präfix-Matching.

CacheEntryState#

CacheEntryState#

public sealed record CacheEntryState { public required bool HasData { get; init; } public DateTimeOffset? UpdatedAt { get; init; } public string? ErrorMessage { get; init; } public DateTimeOffset? ErrorUpdatedAt { get; init; } public bool IsInvalidated { get; init; } public bool IsFetching { get; init; } public int SubscriberCount { get; init; } }

Ein schreibgeschützter Schnappschuss eines Cache-Eintrags, zurückgegeben von DejaClient.GetState. Die Werte sind zum Zeitpunkt des Aufrufs untereinander konsistent und aktualisieren sich danach nicht mehr. Die Cache-Inspektoren auf dieser Seite rendern genau diesen Record.

DisplayUserException#

DisplayUserException#

public class DisplayUserException : Exception { public string DisplayMessage { get; set; } public DisplayUserException() public DisplayUserException(string message) public DisplayUserException(string message, Exception ex) public DisplayUserException(string message, string internalMessage) public DisplayUserException(string message, string internalMessage, Exception ex) }

Eine Exception, deren DisplayMessage gefahrlos — und absichtlich — dem Endnutzer angezeigt werden kann. Queries und Mutations leiten sie zusätzlich zu den allgemeinen Fehler-Callbacks an die dedizierten OnDisplayUserError-Callbacks weiter. Die Konstruktoren mit einer Message verwenden sie sowohl für die Anzeige als auch für Exception.Message; die Konstruktoren mit zwei Messages trennen die für den Nutzer bestimmte Message von der internen.

DejaObservable / IDejaObservable#

IDejaObservable#

public interface IDejaObservable { IDisposable Attach(Action listener); }

Zustand, der genau einen Besitzer über Änderungen benachrichtigen kann — implementiert von Query<T> und Mutation<T>, konsumiert von DejaComponentBase. Attach registriert den einzigen Listener und gibt ein Handle zurück, dessen Dispose ihn (idempotent) wieder löst; ein Attach, während bereits ein Listener registriert ist, wirft InvalidOperationException. Bewusst single-listener statt eines Multicast-Events: Die eine Komponente, der der Zustand gehört, ist das Einzige, das von ihm benachrichtigt werden darf — genau das verhindert, dass zwei Komponenten mit eigenen Queries einander neu rendern.

DejaObservable#

public abstract class DejaObservable : IDejaObservable { public IDisposable Attach(Action listener) protected void NotifyChanged() }

Basisimplementierung, die den einzelnen Listener-Slot hält. Abgeleiteter Zustand ruft NotifyChanged() einmal pro Zustandsübergang auf, nachdem jede Property des Übergangs gesetzt wurde; ohne angehefteten Listener ist es ein sicherer No-op. Erweitere sie, wenn du eigenen beobachtbaren Zustand baust, für den eine DejaComponentBase-Komponente neu rendern soll.