我有以下 html razor 代碼
<StEyth @ref="stEyth"></StEyth>
<Gr1D @ref="gr1D" ></Gr1D>
@code 中的以下代碼
@code {
private Gr1D? gr1D;
private StEyth? stEyth;
protected override async Task OnInitializedAsync()
{
await updateView();
}
private async Task updateView()
{
DrpdVal = new IpDrpdValues { ar1 = gr1D.ar1}
await stEyth.updateView(DrpdVal);
}
}
但是當代碼到達時gr1D為空
DrpdVal = new IpDrpdValues { ar1 = gr1D.ar1}
知道為什么嗎?我怎樣才能獲得 Gr1D 中變數的值?
uj5u.com熱心網友回復:
如果在呼叫前添加一個 yield ,UpdateView則組件將運行它的初始渲染并且子組件存在。
protected override async Task OnInitializedAsync()
{
await Task.Yield();
await UpdateView();
}
但是,如果我正確閱讀了您上面的評論,那么您正在嘗試協調組件之間的資料交換。這非常危險:您無法控制渲染和更新程序。您應該考慮使用服務來保存您的資料,以及您的組件可以訂閱的通知事件。
uj5u.com熱心網友回復:
在@ref被渲染程序中設定。OnInitialized 在第一次渲染之前執行。
所以這樣做的合乎邏輯的地方是在 OnAfterRender 中。使用 firstRender 只執行一次。
protected override async Task OnAfterRenderAsync(bool firstRender)
{
if (firstRender)
{
await updateView();
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/402376.html
標籤:
上一篇:如何從停靠面板隱藏選單
