@if (IsVisible)
{
<div @ref="MyRef">Bla bla bla</div>
}
@code {
bool IsVisible = false;
ElementReference MyRef;
public void Show()
{
IsVisible = true;
StateHasChanged();
// here, MyRef has no Context and no Id
}
}
典型组件误解的一个示例:
StateHasChanged
重新渲染组件。否,它将渲染事件排入渲染器队列。在您的代码中,直到
Show
-它是一个同步的代码块,因此在渲染器获得任何线程时间之前运行到完成。您正在检查
MyRef
在它存在之前。
您需要修改
显示
。
public async Task Show()
{
IsVisible = true;
StateHasChanged();
// Yields and lets the Renderer service it's queue
await Task.Yield();
// or await Task.Delay(1);
// now we exist
var x = MyRef;
}