.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

  1. Server —- SSR, server side render.

  2. WebAssembly —- CSR, client side render.

  3. Auto (Server & WebAssembly) —— hybird SSR, CSR

從技術面評論,這很厲害。但是從 UX 來看則是一團亂。

經一天的磨難評估結論如下,

WebAssembly 模式如同舊版的一樣沒有價值。

Auto 模式會讓系統骨架一團亂,不能一眼讓後續維護的人一目瞭然的系統骨架不推得推薦。 若 Interactivity location = Global 那還可控,在開發期可控,但…未來接手維護人的人…肯定一樣一團亂。

Server 模式依然是本人大大推薦的模式。且在 HttpContext.SignInAsync(claimsPrincipal) 認證的部份可以直接在靜態的 *.razer處理了,雖仍一樣不能突破寫入 HttpContext 的物理限制至少還是前進了幾步。

第四種 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 。

HttpContext 除了 SSG 畫面才能存取外,也能在 AuthenticationStateProvider 讀取。

NET8 新功能要點合集

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