Blazor 服务器 StateHasChanged() 不刷新数据
Blazor server StateHasChanged() does not refresh data
我正在努力让我的 Blazor 组件在更新一些数据后重新呈现。在我的组件中,我有一个团队列表,每个团队都有一个团队成员列表。我可以单击每个团队上的删除按钮以将该成员从团队中删除。这工作正常,除了页面在删除后不刷新。我试过正常设置StateHasChanged()
。我已尝试覆盖 ShouldRender()
,如下所示。我试过使用 InvokeAsync(StateHasChanged)
,但没有重新呈现我的页面。我发现刷新数据的唯一方法是通过再次调用 OnInitializedAsync()
中的代码手动刷新团队成员列表。我也尝试通过通知服务来更新组件间的数据,但似乎 StateHasChanged()
什么也没做。有什么想法吗?
@code {
[Parameter]
public Team? Team { get; set; }
private List<Member?>? TeamMembers { get; set; }
private bool _forceRerender;
protected override async Task OnInitializedAsync()
{
var teamMembers = await _teamService.GetTeamMembers(Team);
if (teamMembers != null) TeamMembers = teamMembers.ToList();
}
private async Task HandleRemoveTeamMember(BsonObjectId memberId, string timeStamp)
{
await _teamService.RemoveMember(Team.Id, memberId, timeStamp);
_forceRerender = true;
StateHasChanged();
}
protected override bool ShouldRender()
{
if (_forceRerender)
{
_forceRerender = false;
return true;
}
return base.ShouldRender();
}
通过调用 _teamService.RemoveMember()
方法删除 TeamMembers
对象后,您没有更新它。
添加一些逻辑以删除 TeamMembers
列表中的条目,然后调用 StateHasChanged()
。
类似
TeamMembers.RemoveAll(x => x.MemberId == memberId);
StateHasChanged();
我正在努力让我的 Blazor 组件在更新一些数据后重新呈现。在我的组件中,我有一个团队列表,每个团队都有一个团队成员列表。我可以单击每个团队上的删除按钮以将该成员从团队中删除。这工作正常,除了页面在删除后不刷新。我试过正常设置StateHasChanged()
。我已尝试覆盖 ShouldRender()
,如下所示。我试过使用 InvokeAsync(StateHasChanged)
,但没有重新呈现我的页面。我发现刷新数据的唯一方法是通过再次调用 OnInitializedAsync()
中的代码手动刷新团队成员列表。我也尝试通过通知服务来更新组件间的数据,但似乎 StateHasChanged()
什么也没做。有什么想法吗?
@code {
[Parameter]
public Team? Team { get; set; }
private List<Member?>? TeamMembers { get; set; }
private bool _forceRerender;
protected override async Task OnInitializedAsync()
{
var teamMembers = await _teamService.GetTeamMembers(Team);
if (teamMembers != null) TeamMembers = teamMembers.ToList();
}
private async Task HandleRemoveTeamMember(BsonObjectId memberId, string timeStamp)
{
await _teamService.RemoveMember(Team.Id, memberId, timeStamp);
_forceRerender = true;
StateHasChanged();
}
protected override bool ShouldRender()
{
if (_forceRerender)
{
_forceRerender = false;
return true;
}
return base.ShouldRender();
}
通过调用 _teamService.RemoveMember()
方法删除 TeamMembers
对象后,您没有更新它。
添加一些逻辑以删除 TeamMembers
列表中的条目,然后调用 StateHasChanged()
。
类似
TeamMembers.RemoveAll(x => x.MemberId == memberId);
StateHasChanged();