我有一个简单的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");
}
}
当我点击名称为“Rendered”的
时,控制台会打印出“Rendered”,并在1秒后再次打印,这意味着Blazor已经将组件渲染了两次。我知道Blazor在将事件分派给组件的过程中会触发组件的自动重新渲染。
但是为什么任务完成后它会重新渲染?如何避免第二次渲染?
我在OnAfterRender生命周期挂钩中有一些JS互操作,现在它运行了两次。我可以添加某种计数器,但那样会污染我的代码,我想避免这种情况。如果我的
但是为什么任务完成后它会重新渲染?如何避免第二次渲染?
我在OnAfterRender生命周期挂钩中有一些JS互操作,现在它运行了两次。我可以添加某种计数器,但那样会污染我的代码,我想避免这种情况。如果我的
HandleClick
只是一个简单的公共void方法,那就没问题了,但这并不总是可能的。
await Task.Run
之前和之后都被刷新,可以参考:https://dev59.com/1FMI5IYBdhLWcg3wRZXJ - dani herrera