【问题标题】:Blazor server StateHasChanged() does not refresh dataBlazor 服务器 StateHasChanged() 不刷新数据
【发布时间】:2022-01-19 19:22:26
【问题描述】:

我正在努力让我的 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();
    }

【问题讨论】:

    标签: blazor blazor-server-side


    【解决方案1】:

    通过调用_teamService.RemoveMember() 方法删除TeamMembers 对象后,您不会更新它。

    添加一些逻辑以删除TeamMembers 列表中的条目,然后调用StateHasChanged()

    有点像

    TeamMembers.RemoveAll(x => x.MemberId == memberId);
    StateHasChanged();
    

    【讨论】:

    • 如果 HandleRemoveTeamMember 是一个 UI 事件(例如按钮 Click),则不需要 StateHasChangedShouldRender 的东西。 HandleRemoveTeamMember 提供的 Task 完成后,底层 Blazor UI 事件处理程序将调用 StateHasChanged。您还可以将 TeamMembers 列表放入您的服务中,然后从 UI 组件中引用它。如果您想显示更多详细信息,我会发布另一个答案。
    猜你喜欢
    • 1970-01-01
    • 2023-02-17
    • 1970-01-01
    • 2020-07-30
    • 1970-01-01
    • 1970-01-01
    • 2021-03-21
    • 2020-04-22
    • 2021-10-18
    相关资源
    最近更新 更多