问题不在于如何让它发挥作用,它是有效的。我只是感兴趣,但无法找出背景中发生的事情以使其工作。
主要示例是标准 Blazor 服务器 webapp 模板,它具有“计数器”和“fetchdata”组件。在 fetchdata 组件中,有protected override async Task OnInitializedAsync()一个被调用,组件呈现自身。如果 OnInitializedAsync() 没有及时返回,渲染仍然发生,在示例中只是写出加载......然后当 OnInitializedAsync() 真正完成时,组件被神奇地重新渲染,但是是什么导致了重新渲染? 它是如何连接在一起的?
框架是否经常查看类的内存以确定是否需要重新渲染?是否只是在 OnInitializedAsync() 调用之前和等待之后调用了页面渲染?
这一切都基于异步编程......
protected override async Task OnInitializedAsync()
{
forecasts = await ForecastService.GetForecastAsync(DateTime.Now);
}
Run Code Online (Sandbox Code Playgroud)
您提到的 OnInitializedAsync 方法有两个部分:同步和异步。当 OnInitializedAsync 方法开始执行时,将调用可等待的 GetForecastAsync 方法,控制权交给调用代码 Blazor 运行时,该代码立即开始呈现 UI。这是您的组件第一次呈现。这也是为什么您必须在代码中检查预测变量不为空的原因。当 GetForecastAsync 返回并填充了 predicts 变量时,更多代码(如果存在)会执行到方法的末尾,之后您的组件将再次重新呈现,这次预测不为空,从而呈现表。当然,这是一个简单的解释。您可以通过查看执行此操作的代码来逐步检查该过程:一切都从这里开始. 遵循它应该不难。没有魔法
希望这可以帮助...
| 归档时间: |
|
| 查看次数: |
2283 次 |
| 最近记录: |