渲染 Blazorise 图表时出现意外行为

问题描述

我正在开发对所有人免费的投资跟踪应用。我正在将 net Core 与 blazor 和 Blazorise 一起用于图表。 我偶然发现了渲染图表的问题。从官方 Blazorise 文档中,我添加方法 protected override async Task OnAfterRenderAsync(bool firstRender)(参见下面的代码)。此方法应在页面首次呈现时重绘图表。问题是这个方法总是触发两次。它在第一次渲染中呈现图表,第二次将它们留空(因为第二次触发时 firstRender = false)。如果我删除 if 块,图表呈现正常。

此外,我添加了应该刷新数据 + 图表的按钮。按下此按钮后,图表会刷新两次(这是不受欢迎的行为,因为它会分散用户的注意力),有趣的是,第二次运行后数据本身(值)会发生变化。

以前有人处理过这个问题吗?

我的HTML代码

...
<div class="btn" @onclick="(async () => await RerenderPage())">Refresh Data</div>
...

我的代码

List<Models.VM.OverView> overview = new List<Models.VM.OverView>();

protected override async Task OnInitializedAsync()
{
    overview = await Getoverview(); //gets overview from api
}
        
public async Task<List<Models.VM.OverView>> Getoverview()
{
 return await Http.GetFromJsonAsync<List<Models.VM.OverView>>("/apI/Overview/GetoverView/" + await GetUserIdAsync);
}
        
protected override async Task OnAfterRenderAsync(bool firstRender)
{
     if (firstRender)
     {
         await HandleRedraw();
     }        
}
        
async Task HandleRedraw()
{
    await pieChart.Clear();


    //this method goes in the overview object and gets data from it
    await pieChart.AddLabelsDatasetsAndUpdate(GetLabelsPieChart(),GetPieChartDataset());
}

解决方法

await Rerenderpage() 在做什么? 从示例来看,它似乎使用了 bool isAlreadyInitialised 标志的用户。

    protected override async Task OnAfterRenderAsync( bool firstRender )
    {
        if ( !isAlreadyInitialised )
        {
           isAlreadyInitialised = true;
           await HandleRedraw();
        }
    }

我假设 async () => await RerenderPage()) 调用一些东西,然后调用 chart.Update 以便组件知道它的 statuschanged ?