0

我有一个 .NET 5.0 Hosted Blazor WASM 应用程序,如下所示:

在此处输入图像描述

我在服务器项目中使用脚手架身份剃须刀页面进行登录和注册等。

我想将登录的User对象存储在 Blazor 客户端 WASM 应用程序的全局状态中。该对象包含用户配置文件信息和一些其他数据。这个想法是避免一次又一次地从数据库中获取此信息,因为来自该对象的数据显示在其他几个页面上。

为此,我正在使用Blazor.Fluxor.Web. 为了将此对象存储为全局状态,我正在调用DispatchNavbar 文档中的方法。

@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 成本。

4

0 回答 0