.net core Blazor.Net服务器端,用于加载本地存储数据

.net core Blazor.Net服务器端,用于加载本地存储数据,.net-core,storage,blazor,.net Core,Storage,Blazor,我使用.NET Core 3.0上的Blazor Preview 9服务器端以及nuget包Blazored.LocalStorage在浏览器的本地存储中加载和保存数据 现在我想在加载应用程序时,在需要时加载它一次 为此,我需要使用OnFirstRenderer,因为它必须完全位于客户端才能访问浏览器缓存。现在,我使用页面“/”(Index.razor)来进行此操作,但我不确定这是否是正确的锚或方法: [Parameter] public string Test { get; set; } p

我使用.NET Core 3.0上的Blazor Preview 9服务器端以及nuget包Blazored.LocalStorage在浏览器的本地存储中加载和保存数据

现在我想在加载应用程序时,在需要时加载它一次

为此,我需要使用OnFirstRenderer,因为它必须完全位于客户端才能访问浏览器缓存。现在,我使用页面“/”(Index.razor)来进行此操作,但我不确定这是否是正确的锚或方法:

[Parameter]
public string Test { get; set; }

protected async override Task OnAfterRenderAsync(bool firstRender)
{
    try
    {
        if (firstRender)
        {
            await localStorage.SetItemAsync("TEST", "Hallo Welt");
        }

        if (Test == null)
        {
            Test = await localStorage.GetItemAsync<string>("TEST");
            StateHasChanged();
        }            
    }
    catch (Exception ex)
    {
        throw;
    }
}
[参数]
公共字符串测试{get;set;}
AfterRenderAsync(bool firstRender)上受保护的异步重写任务
{
尝试
{
if(firstRender)
{
等待localStorage.SetItemAsync(“TEST”,“Hallo Welt”);
}
if(Test==null)
{
Test=等待localStorage.GetItemAsync(“Test”);
StateHasChanged();
}            
}
捕获(例外情况除外)
{
投掷;
}
}
此外,我不知道如何使其适用于所有组件:

使用全局变量创建服务并将其注入每个组件,或者通过CascadingValue方法来实现,这是最好的方法吗


谢谢

OnAfterRender
现在仅在组件初始化时调用,您可以执行JS互操作(之后每次重新渲染组件时都会调用它,但firstRender将为false)。因此,如果您只想从本地存储中加载一次值,可以在
firstRender
期间执行,如下例所示

[Parameter]
public string Test { get; set; }

protected async override Task OnAfterRenderAsync(bool firstRender)
{
    if (firstRender)
    {
        Test = await localStorage.GetItemAsync<string>("TEST");
    }         
}
[参数]
公共字符串测试{get;set;}
AfterRenderAsync(bool firstRender)上受保护的异步重写任务
{
if(firstRender)
{
Test=等待localStorage.GetItemAsync(“Test”);
}         
}
在使值对所有组件可用方面,您可以使用全局状态类,也可以通过级联参数提供它。这两个选项都可以,我并不认为其中一个比另一个更好,我想说的是,如果您需要其他位保持在状态中,那么使用状态类,如果您不需要,那么可能使用级联参数


根据Magoo先生的评论-最好在App.razor组件中执行此操作,这样即使在深度链接场景中也可以加载。

嗨,Chris,我不值得再添加一个答案-不知道您是否建议在App.razor而不是单个页面中执行此操作-这样即使在深度链接中也会发生这种情况?