.NET8 Blazor 初探
.NET8 已上線一陣子了,差不多也該試用看看。
初探小結
滿意外的 .NET6 與 .NET8 的變化超越想像。
系統框架又講整了。支援 Full stack web in .NET 8 with Blazor 就是可以同時混用 SSR/CSR/SSG 三種或更多種 render 模式。在實務上應該只會以一種為主,或有二、三個用其他模式輔助。
@rendermode --- 重點中的重點
ASP.NET Core Blazor 轉譯模式
三種 Interactive render mode
Server —- SSR, server side render.
WebAssembly —- CSR, client side render.
Auto (Server & WebAssembly) —— hybird SSR, CSR
從技術面評論,這很厲害。但是從 UX 來看則是一團亂。
經一天的磨難評估結論如下,
WebAssembly
模式如同舊版的一樣沒有價值。
Auto
模式會讓系統骨架一團亂,不能一眼讓後續維護的人一目瞭然的系統骨架不推得推薦。 若 Interactivity location = Global 那還可控,在開發期可控,但…未來接手維護人的人…肯定一樣一團亂。
Server
模式依然是本人大大推薦的模式。且在 HttpContext.SignInAsync(claimsPrincipal)
認證的部份可以直接在靜態的 *.razer
處理了,雖仍一樣不能突破寫入 HttpContext 的物理限制至少還是前進了幾步。
不同 @rendermode
的通訊方法完全不同。
Server => SignalR
WebAssemply => WebAPI
non-interactive => Form Submit
第四種 render mode
就是 non-interactive render mode,也就是 SSG, static site generation 。在此情境下可以考慮是否啟用流式渲染 StreamRenderingAttribute 。
雖在官方文章沒有強調不過是存在第四種 render mode 的,其實就是沒有指定 Interactive render mode。這種情境下畫面的 render 行為其實就是傳統的 razor page(*.cshtml)
。
在 .NET8 新版的 razor page
已不用 *.cshtml
新的副檔名也是 *.razor
。是的,.NET8 的 razor page 與 blazor component 使用相同的副檔名,這很容易混亂。
新版的 razor page
也可以鑲入 blazor component 這算是好消息。但在在官方文件有說明 .NET8 的 razor page.razor
實質上也只是轉換成 razor page.cshtml
,把 blazor code 轉換成 html code。因為razor page
的本質不變,不支援 Interactive render,所以互動 event 操作幾乎都是無效的,比如 button click event 等等等完全無效。然傳統的 form submit 仍是有效的。
若 CSS Framework 選用 Bootstrap5 這種比較低階的那沒有啟動 interactive render mode 也有效用;然若選用較高階的,如:MudBlazor ,在沒有 interactive render mode 情境下跟殘障沒兩樣。
※ Interactive render 啟用與否最大的差別
HttpContext 只有在非 Interactive render mode 情境下才抓取得到。
也就是 SSG 畫面才能存取 HttpContext,應用上就是登入頁面或首頁,或是商品展示畫面,在點選商品後進入單項商品展示畫面,為了更好的互動UX仍需啟動 Interactive render mode 。
NET8 新功能要點合集
其他參考
Intro to Blazor in .NET 8 - SSR, Stream Rendering, Auto, and more...
CRUD Unleashed: Dominate .NET 8 Blazor with Auto Render Magic, Entity Framework Wizardry, SQL Server
Last updated