PersistentComponentState in Blazor
- Matt
Bei server-seitigem Prerendering läuft OnInitialized zweimal: einmal statisch für das erste HTML, dann noch einmal, sobald die Komponente interaktiv wird. Bei einer teuren Abfrage sieht man kurz, wie der Wert neu gewürfelt wird - bei mir war das eine Zufallszahl, die sichtbar zweimal wechselte.
Der PersistentComponentState-Service löst das: per RegisterOnPersisting einen Callback registrieren, der den Wert am Ende des Prerenderings mit PersistAsJson ablegt. Beim zweiten Durchlauf holt TryTakeFromJson ihn zurück, statt neu zu rechnen. Seit .NET 10 gibt es dafür zusätzlich das [PersistentState]-Attribut auf einer public Property, das den Code auf zwei Zeilen kürzt.
Der Haken: Bei InteractiveWebAssembly landet der Wert unverschlüsselt im HTML, also nichts Sensibles ablegen. Und bis .NET 9 funktioniert das nur beim ersten Laden, nicht nach einer enhanced Navigation - siehe dazu auch meinen Beitrag zu Blazor-Render-Modi.