擁有一個現有的 WinForms 應用程式,我正在使用 C# Blazor WebAssembly 遷移到 .NET 6。
在這個 WinForms 應用程式中,有一個主視窗,假設有大約 50 個單獨的模式對話框視窗(有時又顯示其他模式對話框視窗)。
WinForms 中的步驟
在 WinForms 中顯示對話框非常簡單:
- 用戶單擊主選單項“編輯此事物”。
- 呼叫 AC# 點擊處理程式。
- 在這個點擊處理程式中,我創建了我的對話框類的一個實體。
- 正在顯示該實體。
- 當用戶關閉對話框時,該類的實體超出范圍,稍后由 GC 自動清理。
Blazor 中的步驟
目前,我無法思考如何將這個概念適應 WASM Blazor 世界。
在我的計劃中,我有一個單一的“根”組件(“頁面”),它在用戶與應用程式互動的整個程序中都不會改變。這相當于 WinForms 中的“主視窗”概念。
對于每個以前的 WinForms 對話框視窗,我計劃創建一個 Blazor 組件(每個組件都有一個將表單控制元件顯示為對話框的 DxPopup 組件)。
但我不確定這些組件的放置位置和方式。
問題
- 我真的應該在根組件中放置 50 多個組件并根據需要顯示/隱藏它們嗎?
- 我是否應該有一個DynamicComponent 組件,通過代碼告訴我要渲染哪個實際組件?
- 還有其他選擇嗎?
我擔心的是,當我真正真正需要的是一次一個組件時,提前用這么多組件污染組件樹時會獲得可怕的性能。
uj5u.com熱心網友回復:
正如我在評論中提到的,Blazored.Modal是一個非常強大的庫,用于通過在組件中just-in-time注入一個來顯示對話框IModalService,由Chris Sainty創建。示例用法:
@inject IModalService Modal
<button @onclick="ShowFormBtnClicked">Show form</button>
@code {
void ShowFormBtnClicked()
{
// FormDialog is a different component (FormDialog.razor).
Modal.Show<FormDialog>("Form dialog title");
}
}
您還可以將引數傳遞給對話框并從中接收結果(例如確認對話框)。
檔案
這樣,每個對話框都是一個單獨的組件,僅在需要的地方和時間加載。使用這個庫,您可以避免將所有模式放在組件中,如下所示:
<Modal @bind-Visible="_modal1Visible">...</Modal>
<Modal @bind-Visible="_modal2Visible">...</Modal>
<Modal @bind-Visible="_modal3Visible">...</Modal>
...
...
@code {
private bool _modal1Visible;
private bool _modal2Visible;
private bool _modal3Visible;
...
}
uj5u.com熱心網友回復:
我相信好的做法是只在需要時渲染。
當涉及到基于組件的框架時,您需要盡可能地利用您的組件。動態組件對此很了不起,并且可以真正提高開發速度。
我建議不要使用對話框/模式,酒吧特殊場合。我看到它被大量使用,坦率地說,我認為它不利于用戶體驗和性能。僅渲染當時需要的內容,尤其是在 WASM 中,因為客戶端正在執行所有 UI 計算。
在您的實體中,我建議您在處理此應用程式時從基礎開始,如果正確完成,此基礎將使您的開發速度提高 10 倍。
需要放入文本框嗎?創建一個組件,這樣做您將更快地了解 Blazor 的來龍去脈。您還將意識到該做什么和不該做什么。
好的,現在你有一個文本框,接下來是一個包含文本框的表單項。為表單項創建一個組件。
現在您可以將文本框包裝在表單項中。所以以后,如果你需要改變任何東西,無論是邏輯還是 CSS,你只需要更新一個組件。
從那里擴展您的組件庫,并以此了解您對 Blazor 的理解。
現在到手頭的主題:隱藏不使用的東西是件好事。將代碼塊包裝在if陳述句中,并在需要時呈現它們。也沒有理由不導航到新頁面。如果您在單個頁面組件中有很多事情要做,我建議將您擁有的內容拆分為更小的組件。它更容易完成,也更容易維護。
在一天結束時,您可以擁有:
@if (_showForm1) {
<MyFormComponent Heading="Form 1">
<MyFormItem Label="Value 1">
<MyInputText @bind-Value="@form1.Value1" />
</MyFormItem>
</MyFormComponent>
}
重要提示:并非每個 blazor 組件庫都是好的。我跑過去MatBlazor,對這個庫中糟糕的實作感到驚訝。這是一個過于復雜的混亂。它在 GitHub 上是開源的,所以你可以看看。
讓你所做的一切盡可能簡單。不要讓一個組件成為萬事通。您的組件必須非常具體,并以性能為重點。如果通用組件具有特定的焦點,它就不是萬能的組件。例如,數值的輸入組件可以通用以支持int,long等decimal。但是可以與string,DateTime和一起使用的輸入組件int是多面手。這應該很明顯......但我已經看到了一些東西。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/509946.html
標籤:C#。网西装外套开发快递blazor-webassembly
上一篇:自定義類與C#類共享名稱
