blazor中的OnInitializedAsync()

时间:2019-10-14 06:41:43

标签: c# blazor

我在代码中使用了OnInitializedAsync()。在那个钩子中,我正在获取数据。 在标记中,我检查了数据是否为空。但是我发现检查的数据在onInitalizedAsync()触发之前执行。同时,在也获取数据之后,执行检查的数据。

我已经检查了辉煌的文件,但努力寻找起初触发原因的原因。

<Component1>
  @if (Data != null)
      {
        @foreach (var item in Data) {
             <Component2>
        }
       }
</Componet1>

@code{
  protected override async Task OnInitializedAsync() {
       Data = //data from dataBase
  }
}

我只需要在获取数据后执行检查的数据。谁能指导我解决此问题?

预先感谢

Kesavan

3 个答案:

答案 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();
    }
}