当其他组件调用方法时,Blazor组件不会更新UI

时间:2020-03-27 21:59:22

标签: blazor blazor-client-side

我有3个组成部分。我要从组件B调用组件C的New()方法。 可以使用以下代码(我得到了Console.Writeline)。但是用户界面没有更新。我试图在StateHaseChanged()方法中设置New(),但这给了我以下错误。非常感谢!

错误

WASM:System.InvalidOperationException:渲染句柄尚未出现 分配。

ComponentA(侧边栏项)

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


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

ComponentB(SideBar)

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


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

ComponentC(页面)

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

    }
}

1 个答案:

答案 0 :(得分:1)

尝试如下使用ComponentC中的ComponentB

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

@code {
    private ComponentC componentC;
}

ComponentBase类实现了IComponent.Attach(RenderHandle)方法,当您仅在代码中简单地更新组件时就不会调用该方法。但是,当您在标记中执行此操作时,一切都正确连接了。