Publié le 07/08/2024
Par Christophe MOMMER
Avec .NET 8, Blazor a changé sa façon de gérer l'interactivité. Là où, avant, une application Blazor était forcément 100% interactive, avec .NET 8, il est possible de définir une interactivité par composant. Cela permet notamment de faire des composants non interactifs, c'est-à-dire avec un rendu purement serveur (comme une page ASP.NET MVC/RazorPage).
Seulement, il n'est possible que de définir l'interactivité globale ou l'interactivité par composant au niveau de l'application. Et si ce dernier était choisi, il est nécessaire de spécifier sur chaque composant s'il est interactif ou non... Fastidieux, surtout, si on a quelques composants qui ne sont pas interactifs et que la majorité des composants le sont.
Et bien, cela s'arrête avec .NET 9 !
En effet, avec .NET 9, il est possible de définir l'interactivité globale sur l'application (tous les composants sont interactifs) sauf ceux marqués comme étant non interactifs. On peut donc mixer en fonction du pourcentage de composants interactifs/non interactifs qu'on a dans notre application !
Pour faire ça, c'est pas compliqué :
Tout d'abord, il faut définir dynamiquement l'interactivité dorénavant :
<Routes @rendermode="@PageRenderMode" />
...
@code {
[CascadingParameter]
private HttpContext HttpContext { get; set; } = default!;
private IComponentRenderMode? PageRenderMode
=> HttpContext.AcceptsInteractiveRouting() ? InteractiveServer : null;
}
(oui, maintenant, le composant <Routes> représente le routeur, et vu qu'il active l'interactivité, c'est sur lui que doit être mis l'interactivité globale ou non)
Et une fois que ça c'est fait, il suffira de déclarer les composants SSR (Server Side Rendering) avec la balise
@attribute [ExcludeFromInteractiveRouting]
Facile non ? J'ai envie de dire : "Il était temps !"