【发布时间】:2021-03-21 15:29:35
【问题描述】:
我知道调用StateHasChanged() 方法会通知组件状态已更改,因此它应该重新渲染。
但是,我在其他人的代码中也看到了对 await InvokeAsync(StateHasChanged) 或 await InvokeAsync(() => StateHasChanged()) 的调用,但我不太明白它与 StateHasChanged() 有何不同以及应该在哪里选择一个而不是另一个,并且 为什么。
我能找到的唯一信息是this part of the Blazor docs,上面写着:
如果必须根据外部事件(例如计时器或其他通知)更新组件,请使用 InvokeAsync 方法,该方法调度到 Blazor 的同步上下文。
我不太明白。它只是说“...调度到 Blazor 的同步上下文”,但我对此不太满意!什么是“Blazor 的同步上下文”?
我尝试在Timer 的Elapsed 事件中调用StateHasChanged() - 而不是InvokeAsync(StateHasChanged),它按预期工作,没有任何问题。我应该打电话给await InvokeAsync(StateHasChanged) 吗?!如果是这样,为什么究竟是什么?我觉得这里可能有一些我不知道的重要细微差别。
我还看到了像InvokeAsync(() => InvokeAsync(Something)) 这样的电话,为什么?
另外,我有时也会看到InvokeAsync() 没有await 被调用,那是怎么回事?!
【问题讨论】:
标签: blazor blazor-server-side blazor-webassembly