【发布时间】:2020-10-17 12:46:30
【问题描述】:
我正试图弄清楚如何在单击按钮后刷新客户端组件。
带有示例的回购链接:https://github.com/ovie91/RefreshComponent
站点 /test 或从导航菜单测试
所以我有从 API 检索数据的 OnInitializedAsync 方法
protected override async Task OnInitializedAsync()
{
result = await (some API Call);
}
然后我有一个连接到按钮的方法
private async void ButtonClick()
{
await (some API Call);
result = null;
this.StateHasChanged(); <--- Doesnt work :<
}
我曾尝试使用 this.StateHasChanged(); 但没有任何反应。 作为一种解决方法,我可以强制您再次导航到同一个网站,但这次刷新的是“整个”网站,而不是一个组件。
关于如何处理它的任何想法?
完整代码(精简到最少):
@page "/test"
@inject HttpClient Http
@if (result == null)
{
<p>Loading...<p>
}
else
{
@result
<button @onclick="(() => ButtonClick())">Click</button>
}
@code {
private APIObject result;
protected override async Task OnInitializedAsync()
{
result = await (some API Call);
}
private async void ButtonClick()
{
await (some API Call);
result = null;
this.StateHasChanged(); <--- Doesnt work :<
}
}
更新 我想刷新组件,以便再次触发 OnInitializedAsync,这意味着我不必在单击按钮后再次运行相同的代码。希望你明白我的意思。
【问题讨论】:
-
如果您发布更多代码会有所帮助。你不会在晚上向我们展示你打电话给 StateHasChanged 的时间/地点
-
在 ButtonClick 中 - 我更新了帖子 :)
-
您要更新哪些属性? - 在用户视图中
-
我已经添加了“整个代码”,我正在尝试再次更新整个页面组件。所以点击按钮后我的数据会刷新
-
您在按钮点击中将结果设置为空
标签: async-await blazor blazor-client-side blazor-webassembly