Grazie a .NET 9 abbiamo molta più elasticità nella produzione di applicativi Blazor. Non occorrà più scegliere a priori la modalità Server o WebAsembly, ma sarà in carico allo sviluppatore decidere quale tipologia utilizzare per ogni pagina.
Creando un nuovo progetto Blazor verrano automaticamente creati il progetto startup e una libreria di componenti Razor che verrà referenziata all'interno del Program.cs
app.MapRazorComponents<App>()
.AddInteractiveServerRenderMode()
.AddInteractiveWebAssemblyRenderMode()
.AddAdditionalAssemblies(typeof(MiaBlazorApp.Client._Imports).Assembly);
Questa sintassi non ci è nuova, ne abbiamo già parlato all'interno dello script #1471, la novità è all'interno della view e nel suo modo di comprendere il funzionamento corrente. La situazione fino a .NET 8 era la seguente
@(OperatingSystem.IsBrowser() ? "Wasm" : "Server")
Ma ora, con .NET 9, troviamo molte più funzionalità, eccone un esempio riassuntivo
@page "/test"
@rendermode InteractiveAuto
<h2>Render mode: @RendererInfo.Name</h2>
@if (RendererInfo.IsInteractive)
{
<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>
}
else
{
<p>One moment...</p>
}
Affidandoci alla proprietà RendererInfo possiamo ottenere varie informazioni.
La prima è l'effettiva modalità in cui sta sta girando la view: RendererInfo.Name restituirà Server o WebAssembly. La modalità Server sarà verosimilmente visibile solo al primo caricamento, per dare il tempo materiale al browser di aggiungere alla cache tutte le risorse necessarie per eseguire il WebAssembly.
La seconda proprietà RendererInfo.IsInteractive è quella che potremmo definire una flag: sia che la pagina sia mostrata tramite Server o WebAssembly, ci dirà se è pronta per l'interazione con l'utente. Nell'esempio specifico il bottone verrà mostrato solo quando tutto sarà pronto e caricato correttamente.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Utilizzare l'espressione if inline in una pipeline di Azure DevOps
Utilizzare il metodo ExceptBy per eseguire operazione di sottrazione tra liste
Ottimizzare le pull con Artifact Cache di Azure Container Registry
Introduzione alle Container Queries
Supportare la crittografia di ASP.NET Core con Azure Container App
Creare una libreria CSS universale: Immagini
Implementare il throttle in JavaScript
Gestire pubblicazione Kubernetes tramite .NET Aspire
Configurare automaticamente un webhook in Azure DevOps
Creare una libreria CSS universale: Nav menu
La gestione della riconnessione al server di Blazor in .NET 9
Evitare memory leaks nelle closure JavaScript


