Blazor 中的元素引用为空

Element reference null in Blazor

我有以下 html 剃须刀代码

<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为null
DrpdVal = new IpDrpdValues { ar1 = gr1D.ar1}

知道为什么吗? 我怎样才能得到 Gr1D 中变量的值?

@ref是在渲染时设置的。 OnInitialized 在第一次渲染之前执行。

所以这样做的合乎逻辑的地方是在 OnAfterRender 中。使用 firstRender 只做一次。

protected override async Task OnAfterRenderAsync(bool firstRender)
{
  if (firstRender)
  {
    await updateView();
  }
}

如果您在对 UpdateView 的调用前添加一个 yield,那么该组件将运行它的初始渲染并且存在子组件。

    protected override async Task OnInitializedAsync()
    {
        await Task.Yield();
        await UpdateView();
    }

但是,如果我正确地阅读了您上面的评论,那么您是在尝试协调组件之间的数据交换。这充满了危险:您无法控制渲染和更新过程。您应该考虑使用服务来保存您的数据,以及您的组件可以订阅的通知事件。