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