Blazor组件在其他组件调用方法时不更新UI



我有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();
}
}

相关内容

  • 没有找到相关文章

最新更新