【发布时间】:2019-05-20 14:10:19
【问题描述】:
Blazor 的 Hello World 项目模板包括一个天气预报示例(除了计数器增量示例)。
我玩弄了这个来看看幕后发生了什么。我好像搞不懂。
基本上,如果我注释掉获取天气 .json 数据的代码行,那么我会无限期地看到“正在加载...”。到目前为止是有道理的。但是当我以原始状态运行它时,我看到“正在加载...”,然后很快呈现数据网格。我的困惑是“正在加载...”与数据网格的呈现是在 if-else 语句中。所以这让我相信这个 if-else 以某种方式被评估了两次(加载时一次,加载数据后第二次)。
问题
我想知道这里的幕后情况:
- if-else 语句是否被多次评估?
- 如果网格异步不为空,它如何评估 null 然后渲染网格?
已解决
我找到了我的答案here。 我的怀疑是正确的——页面确实被渲染了两次。关键在于组件的生命周期。
首先调用 OnInit,然后调用 OnInitAsync。任何异步操作, 需要组件在完成后重新渲染,应该是 放在 OnInitAsync 方法中。
(请注意,在 FetchData.cshtml 中,数据是从 OnInitAsync() 覆盖加载的。)
【问题讨论】: