Blazor Component не обновляет интерфейс, когда метод вызывается другим компонентом - PullRequest
2 голосов
/ 28 марта 2020

У меня есть 3 компонента. Когда я хочу, это вызвать метод New() компонента C из компонента B. Это работает со следующим кодом (я получаю Console.Writeline). Но пользовательский интерфейс не обновляется. Я попытался установить StateHaseChanged() в методе New(), но это дало мне следующие ошибки. Большое спасибо!

Ошибка

WASM: System.InvalidOperationException: дескриптор рендеринга еще не назначен.

ComponentA (элемент SideBar)

<NavLink href="@href">
    <div @onclick="OnClick.InvokeAsync">@Text</div>
</NavLink>


@code {
    [Parameter] public string Text { get; set; }
    [Parameter] public EventCallback OnClick { get; set; }
}

Компонент B (SideBar)

<ComponentA Text="Something" Onclick="@(() => componentC.New())" />


@code {
    ComponentC componentC = new ComponentC();
}

Компонент C (Страница)

@code {
    public void New()
    {
        //Dostuff..
        Console.WriteLine("Testing");
        //StateHasChanged();

    }
}

1 Ответ

0 голосов
/ 28 марта 2020

Попробуйте использовать ComponentC в ComponentB следующим образом:

<ComponentA Text="Something" Onclick="@(() => componentC.New())" />
<ComponentC @ref="componentC" />

@code {
    private ComponentC componentC;
}

Класс ComponentBase реализует метод IComponent.Attach(RenderHandle), который не вызывается, когда вы просто обновляете компонент в коде. Однако, когда вы делаете это в разметке, все настроено правильно.

...