【发布时间】:2020-01-22 19:56:59
【问题描述】:
尝试使用最新模板生成的解决方案。
- 有一个服务来保存字符串列表。
- 在 MainLayout.razor 和 NavMenu.razor 中注入服务
- 该服务具有简单的方法,即添加、删除、项目
- 在 MainLayout 中,使用 OnInitializedAsync() 添加一些项目 喜欢关注
.
protected override async Task OnInitializedAsync()
{
await Task.Run(() =>
{
this.svc.Add("string one");
this.svc.Add("string two");
});
await Task.Run(() => StateHasChanged());
}
-
在 NavMenu.razor 的 html 片段中,我很简单地尝试打印
@svc.Items.Count
使用上面的代码,我看不到计数得到更新/刷新, 我也可以在 MainLayout 中有另一个按钮处理程序来调用 svc.Add 方法,但计数未更新。
仅当我尝试在 navMenu.razor 中有一些 btn 处理程序时,blazor 才会重新呈现自己
<button @onclick="SetCurrentTime"> Time </button>
<h4>@time</h4>
void SetCurrentTime()
{
time = DateTime.Now.ToLongTimeString();
}
此问题的 github 存储库:(点击 AddString 并且计数器应该增加)https://github.com/pkaushik23/mycodeshares/tree/master/CheckRefreshBlazor
【问题讨论】:
-
Task.Run()的东西很简单。您可能应该删除所有这些并重试。 -
感谢@HenkHolterman,因为这是一个示例代码,但实际上我会从一些 api 调用中得到它。那里不需要 await/asyn stuf 吗?此外,由于我有图片中的服务,其他一些组件会调用服务上的 Add 方法,我希望我的导航栏组件显示更新的列表。
-
客户端你没有线程,所以 Task.Run() 不能有用,它只能死锁。
-
无复制。去创建一个minimal reproducible example 并确保它显示问题。
-
谢谢,我还在学习。关于任务,我对这个docs.microsoft.com/en-us/aspnet/core/blazor/… 感到困惑。如果你知道我在哪里可以做 MRE,请你告诉我。