【问题标题】:Blazor Component not updating UI when method is invoked by other component当其他组件调用方法时,Blazor 组件不更新 UI
【发布时间】:2020-03-27 21:59:22
【问题描述】:

我有 3 个组件。当我想要从组件 B 调用组件 C 的 New() 方法时。 这适用于以下代码(我得到了 Console.Writeline)。但是用户界面没有更新。我试图在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(在@code 块中)。这是正确的吗?
  • @Artak 这确实是正确的,我已经在我的问题中改变了它。谢谢!

标签: blazor blazor-client-side


【解决方案1】:

尝试在ComponentB中使用ComponentC,如下所示:

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

@code {
    private ComponentC componentC;
}

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

【讨论】:

  • 确实有效,但是会在页面上呈现组件 C。参见组件 A = 侧边栏项目,组件 B = 侧边栏,组件 C = 页面。我已经编辑了我的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-15
  • 1970-01-01
  • 2022-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多