【问题标题】:Why Return Base Method With Blazor OnInitialized Method为什么使用 Blazor OnInitialized 方法返回基方法
【发布时间】:2021-05-30 10:51:39
【问题描述】:

我看到越来越多的 OnInitialized 和 OnInitializedAsync() 返回 base.OnInitialized[Async] 的示例。但为什么?微软网站do not上的例子包括返回基方法

protected override Task OnInitializedAsync()
{
    Contact = new();
    return base.OnInitializedAsync();
}

【问题讨论】:

  • AFAIK,您可能需要调用基本实现的唯一可重写生命周期方法是 SetParametersAsync。否则,在继承时调用可覆盖方法的基本实现只是一个好习惯,即使您知道当前的基本实现什么都不做。如果您在 Blazor 基组件和派生组件之间插入了一个自定义基类(例如,一个可重用的组件基类,它在初始化时为您做一些常见的事情),那么您必须检查所有派生组件并添加 await base.OnInitializedAsync() 重用该行为。

标签: c# blazor


【解决方案1】:

这不是必需的,您不应该添加它们,只是为了避免混乱。

那些生命周期方法都是虚空方法。它们出于所有意图和目的都是抽象的,但这样声明它们将需要您覆盖所有它们。

当然,documented 除外,与 SetParametersAsync 一样。但是选择是否以及在何处调用基本实现是您逻辑的很大一部分,请参阅“如果未调用 base.SetParametersAsync” 部分。

【讨论】:

    【解决方案2】:

    正如@neil-w 提到的,您的剃须刀组件可能会继承另一个自定义组件,因此在这种情况下,如果自定义组件在OnInitializedOnInitializedAsync 中执行某些操作,如果您不调用这些组件,您将破坏逻辑方法。因此,添加基方法调用以避免可能的错误是有代价的。此外,正确的方法是在开始时调用创建方法逻辑,在函数结束时调用销毁逻辑。
    因此,您示例中的正确代码将是:

    protected override async Task OnInitializedAsync()
    {
        await base.OnInitializedAsync();
        Contact = new();
    }
    

    【讨论】:

      猜你喜欢
      • 2021-10-13
      • 1970-01-01
      • 1970-01-01
      • 2012-06-13
      • 2015-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多