【发布时间】:2020-03-17 18:47:59
【问题描述】:
我有一个简单的 Blazor 组件。
<div @onclick="HandleClick">Click me</div>
@code {
public async Task HandleClick()
{
await Task.Run(()=> System.Threading.Thread.Sleep(1000));
}
protected override void OnAfterRender(bool firstRender)
{
Console.WriteLine("Rendered");
}
}
当我单击 div 时,“已渲染”会打印到控制台并在 1 秒后再次打印,这意味着 blazor 已渲染组件两次。我了解 Blazor 会触发组件的自动重新渲染,作为向其分派事件的一部分。
但是为什么任务完成后会重新渲染呢?如何避免第二次渲染?
我在 OnAfterRender 生命周期钩子中有一些 JS 互操作,现在运行两次。我可以添加某种计数器,但这会污染我的代码,我想避免这种情况。
我的HandleClick 是一个简单的公共 void 方法,然后一切正常,但这并不总是可能的
【问题讨论】:
-
当你使 HandleClick 不异步时它将运行。你看到的是在等待之前和之后的渲染。
-
但是为什么在等待任务之后才渲染呢?
-
UI在
await Task.Run前后刷新,看一下:stackoverflow.com/questions/56604886/…
标签: blazor blazor-server-side blazor-client-side