0

我正在开发对所有人免费的投资跟踪应用程序。我将 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());
}
4

1 回答 1

0

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

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

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

于 2021-06-02T13:23:23.570 回答