隨著 .NET 8 的釋出,Blazor 已成為全堆疊 Web UI 框架,可用於開發在元件或頁面級別呈現內容的應用,其中包含:
預設情況下,互動式呈現模式還會預呈現內容。
流式渲染是 .NET 8 Blazor 中另一個有前途的功能,在將靜態伺服器呈現與 Blazor 結合使用時,可以在響應流中流式傳輸內容更新。 流式呈現可以改善執行長期執行非同步任務的頁面的使用者體驗,以便在內容可用後立即通過呈現內容來完全呈現。流式渲染允許渲染靜態 HTML 以及內容的預留位置。一旦非同步伺服器端呼叫完成(意味著它可以傳輸資料),實際的 HTML 頁面就會通過用實際資料填充預留位置物件來更新。
/Pages/Weather.razor
@attribute [StreamRendering]
可以使用現有 PersistentComponentState 服務在 Blazor Web 應用中保留和讀取元件狀態
自動模式是我個人最期待的一種模式,它代表了 Blazor 的「終極」場景,允許將伺服器端和 WebAssembly 結合在一起。
此場景提供來自伺服器的初始頁面,這意味著它將快速載入。隨後,必要的物件被下載到使用者端,因此下次頁面載入時,它會從 Wasm 提供。
/Pages/Weather.razor
注意第2行:
@attribute [StreamRendering]
這允許新的 Blazor 流渲染功能發揮作用。
程式碼部分更新為:
@attribute [StreamRendering(false)]
然後單擊「Weather」頁面。請注意,這次沒有顯示「Loading...」訊息,但頁面需要幾秒鐘的時間才能呈現並顯示實際的天氣表。
開啟新工程的 Program.cs 檔案, 會看到以下新的設定
builder.Services.AddRazorComponents()
.AddInteractiveServerComponents() //新增服務以支援呈現互動式伺服器元件
.AddInteractiveWebAssemblyComponents(); //新增服務以支援呈現互動式 WebAssembly 元件
//終結點約定生成器擴充套件
app.MapRazorComponents<App>()
.AddInteractiveServerRenderMode() //設定應用程式的伺服器渲染模式
.AddInteractiveWebAssemblyRenderMode() //為應用設定 WebAssembly 呈現模式。
.AddAdditionalAssemblies(typeof(Counter).Assembly);
<Dialog @rendermode="InteractiveServer" />
@rendermode renderMode
@code {
private static IComponentRenderMode renderMode =
new InteractiveWebAssemblyRenderMode(prerender: false);
}
@page "..."
@rendermode RenderMode.InteractiveServer
呈現模式 | 指令 | 注意事項 | WebSocket |
---|---|---|---|
互動式伺服器 | @attribute [RenderModeInteractiveServer] | 放在SSR工程(BlazorApp1) | 切入頁面會主動重連 |
互動式 WebAssembly | @attribute [RenderModeInteractiveWebAssembly] | 放在Wasm工程(BlazorApp1.Client) | 切入頁面會主動斷開 |
互動式自動 | @attribute [RenderModeInteractiveAuto] | 放在Wasm工程(BlazorApp1.Client) | 自動根據情況執行操作 |
RenderModeInteractiveServer.razor
路徑:SSR工程(BlazorApp1)/Components/Pages
@page "/render-mode-InteractiveServer"
@rendermode InteractiveServer
<h2>InteractiveServer</h2>
<button @onclick="UpdateMessage">Click me</button> @message
@code {
private string message = "Not clicked yet.";
private void UpdateMessage()
{
message = "Somebody clicked me!";
}
}
RenderModeInteractiveWebAssembly.razor
路徑:Wasm工程(BlazorApp1.Client)/Pages
@page "/render-mode-InteractiveWebAssembly"
@rendermode InteractiveWebAssembly
<h2>InteractiveWebAssembly</h2>
<button @onclick="UpdateMessage">Click me</button> @message
@code {
private string message = "Not clicked yet.";
private void UpdateMessage()
{
message = "Somebody clicked me!";
}
}
RenderModeInteractiveAuto.razor
路徑:Wasm工程(BlazorApp1.Client)/Pages
@page "/render-mode-InteractiveAuto"
@rendermode InteractiveAuto
<h2>InteractiveAuto</h2>
<button @onclick="UpdateMessage">Click me</button> @message
@code {
private string message = "Not clicked yet.";
private void UpdateMessage()
{
message = "Somebody clicked me!";
}
}
FreeSql QQ群:4336577
BA & Blazor QQ群:795206915
Maui Blazor 中文社群 QQ群:645660665
本作品採用 知識共用署名-非商業性使用-相同方式共用 4.0 國際許可協定 進行許可。歡迎轉載、使用、重新發布,但務必保留文章署名AlexChow(包含連結: https://github.com/densen2014 ),不得用於商業目的,基於本文修改後的作品務必以相同的許可釋出。如有任何疑問,請與我聯絡 。
本文來自部落格園,作者:周創琳 AlexChow,轉載請註明原文連結:https://www.cnblogs.com/densen2014/p/17833038.html
今日頭條 | 部落格園 | 知乎 | Gitee | GitHub