Blazor,return from/halt 加载时呈现

Blazor, return from/halt rendering if loading

我们在所有 Blazor 页面中都有与下面类似的代码,以简单地停止呈现直到加载完成。看起来还可以,但是网站还没有经过那么多的测试。

我有点担心,这意味着页面中间的 return;,will/could 以一种方式扰乱了 blazors 流程或其他,导致内存泄漏或其他问题。

我看到的每个示例都使用 if/else,但如果下面的示例有效,则更倾向于减少页面的嵌套和复杂性。

那么,这个方法好用吗,会不会给我们带来麻烦呢?

一个简化的例子:

@usings/injects here
    
@if (IsLoading)
{
    @:Loading content..
    return;
}
    
<p>This will not be rendered until page is initialized and Model populated</p> 
<p>@Foo.Bar</p>
    
@code {
    public bool IsLoading { get; set; } = true;
    public FooModel Foo { get; set;}
    
    protected override async Task OnInitializedAsync()
    {
        try
        {
            Foo = await GetFooFromRepo();
        }
        catch (Exception ex)
        {
            Toaster.Add("Something went wrong when loading foo.", 
                 MatToastType.Danger, "Error");
        }
        finally
        {
            IsLoading = false;
        }
    }
}

我不会使用这种方法,

我推荐的方法是使用 @if-else 语句,如下所示:

@if (IsLoading)
{
    @:Loading content..
}
else 
{  
  <p>This will not be rendered until page is initialized and Model populated</p> 
  <p>@Foo.Bar</p>
}
    

这是品味或风格的问题。

它本质上没有任何问题,你只是从一个方法返回。

this post 中,它被比作意大利面条代码,但这要视情况而定。 return 的写法非常清晰且难以忽视。而替代方案 else { } 有其自身的阅读成本。