我有一个 .NET 5.0 Hosted Blazor WASM 应用程序,如下所示:
我在服务器项目中使用脚手架身份剃须刀页面进行登录和注册等。
我想将登录的User
对象存储在 Blazor 客户端 WASM 应用程序的全局状态中。该对象包含用户配置文件信息和一些其他数据。这个想法是避免一次又一次地从数据库中获取此信息,因为来自该对象的数据显示在其他几个页面上。
为此,我正在使用Blazor.Fluxor.Web
. 为了将此对象存储为全局状态,我正在调用Dispatch
Navbar 文档中的方法。
@using IdentityDocApp.Client.Store.User;
@inject IDispatcher Dispatcher
@inject IState<UserState> UserState
<ul class="nav flex-column">
<li class="nav-item px-3">
<NavLink class="nav-link" href="" Match="NavLinkMatch.All">
<span class="oi oi-home" aria-hidden="true"></span> Home
</NavLink>
</li>
<AuthorizeView Roles="@IdentityDocApp.Shared.RoleTypes.ADMIN">
<li class="nav-item px-3">
<NavLink class="nav-link" href="journals">
<span class="oi oi-book" aria-hidden="true"></span> Journal Entry
</NavLink>
</li>
</AuthorizeView>
</ul>
@code {
[CascadingParameter] public Task<AuthenticationState> AuthTask { get; set; }
private System.Security.Claims.ClaimsPrincipal user;
protected async override Task OnInitializedAsync()
{
var authState = await AuthTask;
this.user = authState.User;
Dispatcher.Dispatch(new LoadUserAction(user.Identity.Name));
}
}
根据我对 SPA 的理解,组件只有在更改后才会重新渲染。现在NavBar
根本没有改变,只要我/journals
从/
索引页面路由到页面,Navbar
就会重新渲染并再次从数据库填充状态。
每次我访问一个页面,调用数据库获取状态的整个过程都会重复。
问题。1)为什么?我想根据我的选择重新获取状态。
问题。2)我应该如何填充这个全局状态,以便它只填充一次(在用户登录后)而不是一次又一次?
更新
我正在使用 Cosmos DB,并且正在寻求将已登录用户的文档/项目保留在该州内。该文档包含用户文档拥有/嵌入的多个实体。因此,我不想将其全部存储在索赔中。全局状态方法背后的主要思想是节省查询 RU 成本。