Reputation: 2592
I am struggling to get my Blazor components to rerender after updating some data. In my component I have a list of teams and each team has a list of team members. I can click on a delete button on each team to remove that member from the team. This works fine, except that the page does not refresh after deleting. I have tried setting StateHasChanged()
normally. I have tried overriding ShouldRender()
as shown below. I have tried using InvokeAsync(StateHasChanged)
, but nothing rerenders my page. The only thing I have found that refreshes the data is manually refreshing the team member list by calling the code in OnInitializedAsync()
again. I have also tried doing this through a notifier service to update data across components, but it seems like StateHasChanged()
does absolutely nothing. Any ideas?
@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();
}
Upvotes: 2
Views: 8056
Reputation: 563
You are not updating your TeamMembers
object after removing it by calling the _teamService.RemoveMember()
method.
Add some logic to remove the entry in your TeamMembers
list and THEN call StateHasChanged()
.
Somthing like
TeamMembers.RemoveAll(x => x.MemberId == memberId);
StateHasChanged();
Upvotes: 2