Datenabruf, Caching und Synchronisierung für Blazor,
ohne Boilerplate

Deklariere eine Query, binde ihren Lade- und Fehlerzustand, und lass einen gemeinsamen, keybasierten Cache die Requests deduplizieren. Mutations invalidieren Keys, sodass jede Komponente, die diese Daten anzeigt, sich selbst neu lädt — und beim Wegnavigieren wird abgebrochen, was gerade läuft, bis hinunter zum Server. Blazor WebAssembly und Server, ohne Abhängigkeiten.

$ dotnet add package Deja
Todos.razor
@page "/todos"
@inherits DejaComponentBase
@inject TodoApi Api

@if (_todos.IsLoading) { <Spinner/> }
@if (_todos.IsError) { <Alert>@_todos.ErrorMessage</Alert> }

<ul>
    @foreach (var todo in _todos.Data ?? [])
    {
        <li>@todo.Title</li>
    }
</ul>

@code {
    private readonly Query<List<Todo>> _todos = new();

    protected override Task OnInitializedAsync()
        => _todos.Execute("todos", Api.GetTodosAsync);
}

⚡ Bindbarer asynchroner Zustand

Deklariere eine Query<T>, binde IsLoading, IsError und Data im Markup. Keine Flags, kein try/catch, kein StateHasChanged.

🗄 Gemeinsamer Query-Cache

Komponenten mit demselben Key rendern sofort aus dem Cache, teilen sich einen laufenden Request und revalidieren im Hintergrund, wenn die Daten stale sind.

✂️ Automatischer Abbruch

Wegnavigieren bricht laufende Requests ab — bis hinunter zum Server. Ein neuerer Ladevorgang verdrängt und bricht einen älteren ab, veraltete Antworten gewinnen also nie.

🔒 Komponenten-Isolation

Zustand benachrichtigt genau einen Besitzer. Zwei Komponenten nebeneinander können einander nie neu rendern — beweisbar in der Isolations-Demo.

✍️ Mutations & Invalidierung

Mutation<T> verfolgt Schreibvorgänge und invalidiert Query-Keys bei Erfolg per Präfix, sodass jede betroffene Liste sich selbst neu lädt.

📦 Ohne Abhängigkeiten

Keine JSON-Serialisierer, keine reflektionslastige Magie — trimming- und AOT-sicher, mit Multi-Targeting von net8.0 bis net10.0.

Wer React Query (TanStack Query) kennt: Deja ist dieses Modell des Server-State-Managements, neu gebaut für Blazor in idiomatischem C#. Diese Doku läuft auf Deja selbst — jede Demo ist die echte Bibliothek, die von einer echten API lädt.