gpt4 book ai didi

.net-core - Blazor .Net 服务器端加载 LocalStorage 数据的位置

转载 作者:行者123 更新时间:2023-12-05 01:39:33 25 4
gpt4 key购买 nike

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

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

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

[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;
}
}

我也不知道如何让所有组件都可以使用它:

最好的方法是使用全局变量创建服务并将其注入(inject)每个组件,还是通过 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");
}
}

就使值对所有组件可用而言,您可以使用全局状态类或通过级联参数提供它。任何一个选项都可以工作,我真的不认为一个比另一个更好,我想说的是,如果你需要其他位保持状态,那么使用状态类,如果你不这样做,那么可能会使用级联参数.

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

关于.net-core - Blazor .Net 服务器端加载 LocalStorage 数据的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58112206/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com