从列表中删除项目不会刷新正确的组件

时间:2019-05-12 12:34:57

标签: .net-core blazor

我有一个Blazor页面,其中显示了一个基于我动态添加/删除项目的列表的组件列表:

 <TelerikButton OnClick="() => State.AddSymbols(SymbolToAdd)">Add</TelerikButton>

@foreach (var symbolToDisplay in State.SymbolsToDisplay)
    {
        <StockGraph SymbolToDisplay="@symbolToDisplay" OnRemoved="() => State.RemoveSymbol(symbolToDisplay)"/>
    }

这是状态代码:

 public void AddSymbols(string symbol)
    {
        SymbolsToDisplay.Add(symbol);
        StateHasChanged();
    }

    public void RemoveSymbol(string symbol)
    {
        SymbolsToDisplay.Remove(symbol);
        StateHasChanged();
    }

以及该组件的代码:

<div class="stock-graph">
<p>
    @companyData?.companyName
</p>
<div>
    <TelerikButton class="delete-item" onclick="@OnRemoved">X</TelerikButton>
</div>
<TelerikChart ref="@chart">
    <TelerikChartSeriesItems>
        <TelerikChartSeries Type="ChartSeriesType.Line" Data="@data.StockValues"
                            Field="@nameof(StockValueData.StockValue)"
                            CategoryField="@nameof(StockValueData.Date)">
        </TelerikChartSeries>
    </TelerikChartSeriesItems>
    <TelerikChartValueAxes>
        <TelerikChartValueAxis Color="red"></TelerikChartValueAxis>
    </TelerikChartValueAxes>
</TelerikChart>

这应该很简单。但是出于某种原因,即使删除列表中的必需值并包含所有正确的值,删除组件时也总是删除最后一个显示的组件。

我有一个在我的github上运行的代码示例:GitHubRepo

只需添加随机股票代码,例如GOOG,AAPL,ACC

1 个答案:

答案 0 :(得分:0)

因此,事实证明问题出在我初始化/更新组件参数的方式中。 需要更新页面和组件中的数据后, OnInitAsync 不会再次运行。 相反,您必须使用 OnParametersSetAsync 以便组件正确更新其参数