Удаление элементов из списков не обновляет правильные компоненты - PullRequest
0 голосов
/ 12 мая 2019

У меня есть страница 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 голосов
/ 12 мая 2019

Получается, что проблема возникла из-за способа, которым я инициализирую / обновляю параметр моего компонента. OnInitAsync больше не запускается после того, как вам потребуется обновить данные на странице и компоненте.Вместо этого вы должны использовать OnParametersSetAsync , чтобы компонент корректно обновил свой параметр

...