Blazor - 如何防止自定义组件在基础组件中渲染

问题描述 投票:0回答:1

我在 Blazor 中开发了一些组件。全部都是继承自

BaseComponent

public abstract class BaseComponent : ComponentBase
{
    [Parameter]
    public bool Visible { get; set; } = true;

    // Other properties ....
}

Visible
属性应控制是否应渲染派生组件。

我希望所有派生组件都具有明显的功能(而不是在所有组件中编写

if
块。

如何防止组件在基础组件中渲染?

asp.net-core blazor blazor-server-side blazor-webassembly
1个回答
0
投票

您需要:

  1. 阻止父级渲染组件
  2. 防止任何内部调用
    StateHasChanged
    渲染组件

你可以这样做:

public abstract class BaseComponent : ComponentBase
{
    [Parameter] public bool Visible { get; set; } = true;

    // Prevents rendering from the parent
    public override Task SetParametersAsync(ParameterView parameters)
    {
        parameters.SetParameterProperties(this);

        if (this.Visible)
            return base.SetParametersAsync(ParameterView.Empty);

        return Task.CompletedTask;
    }

    // Prevents rendering if StateHasChanged is called
    protected override bool ShouldRender()
    {
        return this.Visible;
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.