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 { }
有其自身的阅读成本。
我们在所有 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 { }
有其自身的阅读成本。