C# Blazor,加载时从/停止渲染返回
我们在所有Blazor页面中都有类似的代码,只需停止渲染,直到加载完成。它似乎工作正常,但该网站还没有进行太多的测试 我有点担心,这意味着回报;在页面的中间,将(或)把闪光灯弄得乱七八糟,导致内存泄漏或任何东西。 我看到的每个示例都使用if/else,但如果下面的示例有效,则最好减少页面的嵌套和复杂性 那么,这种方法可以使用吗,还是会给我们带来问题 一个简化的例子:C# Blazor,加载时从/停止渲染返回,c#,blazor,blazor-server-side,C#,Blazor,Blazor Server Side,我们在所有Blazor页面中都有类似的代码,只需停止渲染,直到加载完成。它似乎工作正常,但该网站还没有进行太多的测试 我有点担心,这意味着回报;在页面的中间,将(或)把闪光灯弄得乱七八糟,导致内存泄漏或任何东西。 我看到的每个示例都使用if/else,但如果下面的示例有效,则最好减少页面的嵌套和复杂性 那么,这种方法可以使用吗,还是会给我们带来问题 一个简化的例子: @usings/injects在这里 @如果(孤岛加载) { @:正在加载内容。。 返回; } 在页面初始化并填充模型之前,将不会
@usings/injects在这里
@如果(孤岛加载)
{
@:正在加载内容。。
返回;
}
在页面初始化并填充模型之前,将不会呈现此内容
@富吧
@代码{
public bool IsLoading{get;set;}=true;
公共FooModel Foo{get;set;}
受保护的重写异步任务OnInitializedAsync()
{
尝试
{
Foo=等待GetFooFromRepo();
}
捕获(例外情况除外)
{
Toaster.Add(“加载foo时出错。”,
MatToastType.Danger,“错误”);
}
最后
{
IsLoading=false;
}
}
}
我不会使用这种方法
我建议这样做的方式是用一个声明,如下所示:
@if (IsLoading)
{
@:Loading content..
}
else
{
<p>This will not be rendered until page is initialized and Model populated</p>
<p>@Foo.Bar</p>
}
@if(正在加载)
{
@:正在加载内容。。
}
其他的
{
在页面初始化并填充模型之前,将不会呈现此内容
@富吧
}
这是一个品味或风格的问题
它本质上没有什么问题,只是从一个方法返回
在这本书中,它被比作意大利面条代码,但这要视情况而定。您编写
return
的方式非常清晰,不容忽视。另一种选择是else{}
有它自己的阅读成本。你的理由是什么?想象一下,试图找出为什么某个巨大的标记块没有在某个页面中呈现,而周围没有任何条件。只发现在组件的中间有一些意外的返回语句。如果是我的话,我想我的反应不会很好。发件人:我明白你的意思。然而,在本例中,代码将始终位于所有其他“html”标记之上,以保持其结构化。感谢您的投入,无论哪种方式,都会奏效,正如@Henk所说,这是一个品味问题。但我肯定会使用@if-else方法。这也是习惯的问题。。。在我看来,使用if-else
,创建意大利面代码的机会就更少了。我认为,如果代码允许,这更像是一种快速返回的方法,就像大多数方法中的方法一样。我对它的结构很满意,我最担心的是它会给blazor堆栈甚至js带来一些问题。谢谢——这是一个品味和风格的问题,这是一个完美的答案。我将坚持这种方法,因为我不喜欢在if/else中嵌套大块的标记。