单行条件渲染是否可行?
Is single-line conditional rendering possible?
如何像在 React JSX 中一样在 Blazor 中呈现条件元素?
例如 React
:
export const LoginPage: FC = () => {
// useState's
// useEffect's
return <div>{!loadingState ? usernameState : <Spin />}</div>; // <-- Goal
};
我在 Blazor 中试过:
<div>
You logged in AS:
@if (_loading)
{
<Spin/>
}
else
{
@_userName
}
</div>
有什么办法可以把这个写成一行吗?
<div> You logged in AS: @if(_loading){ <Spin/> } else { @_userName } </div>
太棒了,对吧?
如果你特别想使用三元运算符,那么我不确定,我需要考虑一下。
回答你的问题:
How to render conditional elements in Blazor like in React JSX?
可以,但是还有其他方法可以解决您展示的示例。显示某种形式的用于加载的可视控件非常常见,您可以构建一个组件控件。
这是一个简单的例子:
LoadingControl.razor
@*@if (this.IsLoaded)
{
@this.ChildContent
}
else
{
<div class="loader"></div>
}*@
@_content
@code {
[Parameter] public RenderFragment ChildContent { get; set; }
[Parameter] public bool IsLoaded { get; set; }
private RenderFragment _loader => builder => builder.AddMarkupContent(0, $"<div class='loader'></div>");
private RenderFragment _content => this.IsLoaded ? ChildContent : _loader;
}
我已经展示了两种呈现内容的方法。
然后你可以这样使用它:
<div>
You logged in AS:
<LoadingControl IsLoaded="!_isLoading">
@_userName
</LoadingControl>
</div>
如何像在 React JSX 中一样在 Blazor 中呈现条件元素?
例如 React
:
export const LoginPage: FC = () => {
// useState's
// useEffect's
return <div>{!loadingState ? usernameState : <Spin />}</div>; // <-- Goal
};
我在 Blazor 中试过:
<div>
You logged in AS:
@if (_loading)
{
<Spin/>
}
else
{
@_userName
}
</div>
有什么办法可以把这个写成一行吗?
<div> You logged in AS: @if(_loading){ <Spin/> } else { @_userName } </div>
太棒了,对吧?
如果你特别想使用三元运算符,那么我不确定,我需要考虑一下。
回答你的问题:
How to render conditional elements in Blazor like in React JSX?
可以,但是还有其他方法可以解决您展示的示例。显示某种形式的用于加载的可视控件非常常见,您可以构建一个组件控件。
这是一个简单的例子:
LoadingControl.razor
@*@if (this.IsLoaded)
{
@this.ChildContent
}
else
{
<div class="loader"></div>
}*@
@_content
@code {
[Parameter] public RenderFragment ChildContent { get; set; }
[Parameter] public bool IsLoaded { get; set; }
private RenderFragment _loader => builder => builder.AddMarkupContent(0, $"<div class='loader'></div>");
private RenderFragment _content => this.IsLoaded ? ChildContent : _loader;
}
我已经展示了两种呈现内容的方法。
然后你可以这样使用它:
<div>
You logged in AS:
<LoadingControl IsLoaded="!_isLoading">
@_userName
</LoadingControl>
</div>