我在代码中使用了OnInitializedAsync()。在那个钩子中,我正在获取数据。 在标记中,我检查了数据是否为空。但是我发现检查的数据在onInitalizedAsync()触发之前执行。同时,在也获取数据之后,执行检查的数据。
我已经检查了辉煌的文件,但努力寻找起初触发原因的原因。
<Component1>
@if (Data != null)
{
@foreach (var item in Data) {
<Component2>
}
}
</Componet1>
@code{
protected override async Task OnInitializedAsync() {
Data = //data from dataBase
}
}
我只需要在获取数据后执行检查的数据。谁能指导我解决此问题?
预先感谢
Kesavan
答案 0 :(得分:2)
必须首先进行数据检查,因为必须在time = [1 10 100 200]; % for example
t0 = datetime(1900,1,1);
result = t0 + hours(time)
方法之前进行渲染。因此,如果OnInitializedAsync
花费很长时间加载数据,则用户已经看到了一些东西,而不仅仅是空白页面。
为什么只在获取数据后才要检查数据?
作为解决方法,您可以创建局部变量OnInitializedAsync
,只有在将数据加载到bool dataIsLoaded = false;
中之后才能将其设置为true。然后在数据检查中执行:OnInitializedAsync
答案 1 :(得分:0)
我假设Data是列表或数组类型。我通常要做的是在OnInitialized中初始化列表或数组,并在OnInitializedAsync中进行调用。因此无需检查。
protected override void OnInitialized()
{
Data = new List<Type>()
}
答案 2 :(得分:0)
我建议否检查空数据。取而代之的是只渲染Data变量,然后在将数据加载到OnInitializedAsync()中之后调用StateHasChanged()。关键是让框架知道正在使用变量Data,因此在调用StateHasChanged()时它将适当地呈现Data。
<h3> @Data </h3>
@code {
private string Data = "";
protected override async Task OnInitializedAsync()
{
Data = await Service.GetDataAsync();
StateHasChanged();
}
}