【发布时间】:2020-10-18 12:33:59
【问题描述】:
每个 Blazor 组件都有一个可以被覆盖的方法 OnInitializedAsync()。
这似乎是任何调用获取组件渲染期间应使用的数据的好地方,例如:
protected override async Task OnInitializedAsync()
{
var dataForRendering = await SomeHttpClient.RetrieveSomeData();
}
但是,在 Blazor 组件中存在一个已知行为,其中 OnInitializedAsync() 方法被触发两次。在Stackoverflow discussion中有关于如何处理的说明。
建议检查 ComponentContext.IsConnected 状态,该状态只允许触发一次所需的操作。
但是,update from September, 4th 告诉我们应该
删除
IComponentContext的任何用法,并将预渲染期间不应运行的任何逻辑移至OnAfterRender或OnAfterRenderAsync。
这里也不能使用OnAfterRenderAsync。是的,它只被触发一次,但是在它被触发时,组件已经被渲染,并且检索任何应该用于渲染的数据已经很晚了。
所以问题是:
- 现在如何避免在“OnInitializedAsync()”执行期间重复加载数据?对数据服务器的两次调用并不是一个好的性能示例。
- 为这样的组件渲染加载数据是个好主意吗?也许有更好的方法将数据传递给组件?
【问题讨论】:
标签: blazor