Blazor WASM从服务端刷新数据后UI未更新问题求助
问题原因
- 核心问题出在
Delete方法的返回值使用了async void:Blazor的异步事件处理逻辑中,只有返回Task的异步方法,框架才能跟踪其执行生命周期,在异步操作全部完成后自动触发UI重渲染。async void属于“火后不管”的写法,框架无法感知方法的执行完成时机,哪怕你已经更新了products变量,也不会触发自动UI刷新。
解决方案
- 优先将
Delete方法的返回值从async void修改为async Task,Blazor原生支持事件处理器返回Task类型,修改后框架会自动等待异步逻辑执行完成,然后触发UI刷新,修改后的代码如下:
private async Task Delete(string id) { Console.WriteLine($"Delete product {id}"); await ProductService.DeleteProduct(id); Console.WriteLine($"Deleted product {id}"); products = await ProductService.GetProducts(); Console.WriteLine($"Products loaded {products.Count}"); }
- 如果存在特殊场景(比如异步逻辑运行在Blazor同步上下文之外),修改返回值后仍未触发刷新,可以在更新
products变量后手动调用StateHasChanged()方法强制触发UI重绘:
products = await ProductService.GetProducts(); StateHasChanged(); // 手动触发UI渲染
内容的提问来源于stack exchange,提问作者Gerrit
相关产品推荐
相关产品推荐

