Isolation

Zwei Geschwister-Komponenten ohne Key, die einander nachweislich nicht neu rendern können: Deja-Zustand benachrichtigt genau einen Listener — die besitzende Komponente.

Geschwister-Komponenten können einander nicht neu rendern

Component A renders: 3

State IsLoading IsReFetching IsError IsCachedData IsStale ReFetchCount: 1

#1 — delectus aut autem

Component B renders: 3

State IsLoading IsReFetching IsError IsCachedData IsStale ReFetchCount: 1

#2 — quis ut nam facilis et officia qui

Each panel owns its own unkeyed Query<T>. Reloading one advances its render counter while the other's stays frozen — Deja state notifies a single attached listener, and that listener is the owning component.

<div class="demo-panels">
    <IsolationPanel Title="Component A" TodoId="1"/>
    <IsolationPanel Title="Component B" TodoId="2"/>
</div>

<p class="demo-note">
    Each panel owns its own unkeyed <code>Query&lt;T&gt;</code>. Reloading one advances its render
    counter while the other's stays frozen — Deja state notifies a single attached listener, and
    that listener is the owning component.
</p>

Warum das wichtig ist#

Event- oder Store-basierte State-Manager senden per Broadcast: Der Refresh einer Komponente zwingt jeden Subscriber durch ein Re-Render. Dejas IDejaObservable hat einen einzigen Listener-Slot — ein zweiter Listener wirft eine Exception, und der eine Listener ist die besitzende Komponente. Die Render-Zähler machen die Garantie beobachtbar: Lade Panel A so schnell neu, wie du willst — der Zähler von Panel B bewegt sich nie.

Teilen ohne Kopplung#

Wenn zwei Komponenten Daten teilen sollen, teile nicht die Query — teile den Cache-Eintrag, indem du denselben Key verwendest (siehe die Demo Gemeinsamer Cache), oder reiche Data als [Parameter] nach unten weiter. Beide Wege halten die Besitzverhältnisse eindeutig und Renders lokal begrenzt.