我有3个组件。当我想从组件B调用组件C的New()
方法时。这适用于以下代码(我得到了Console.Writeline(。但UI没有更新。我曾尝试在New()
方法中设置StateHaseChanged()
,但这给了我以下错误。非常感谢!
错误
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; }
}
组件B(边栏(
<ComponentA Text="Something" Onclick="@(() => componentC.New())" />
@code {
ComponentC componentC = new ComponentC();
}
组件C(页面(
@code {
public void New()
{
//Dostuff..
Console.WriteLine("Testing");
//StateHasChanged();
}
}
尝试在ComponentB
中使用ComponentC
,如下所示:
<ComponentA Text="Something" Onclick="@(() => componentC.New())" />
<ComponentC @ref="componentC" />
@code {
private ComponentC componentC;
}
ComponentBase
类实现了IComponent.Attach(RenderHandle)
方法,当您只是在代码中新建组件时,不会调用该方法。但是,当您在标记中执行此操作时,就会正确地连接起来。
将您的代码更改为:
<NavLink href="@href">
<div @onclick="Navigate">@Text</div>
</NavLink>
@code {
[Parameter] public string Text { get; set; }
[Parameter] public EventCallback OnClick { get; set; }
private void Navigate(){
OnClick.InvokeAsync();
}
}