如何在页面重新加载时在blazor Web程序集中的单例状态容器中保存值

问题描述

我练习和学习blazor web assembly。我正在学习组件之间进行通信的方式。一种这样的方法是使用状态容器。这可以按预期工作,但不能保持页面刷新的价值。

这是我的状态容器类,

AppState

public class AppState
{
    public string SomeText { get; set; }
}

我已将其注册为Singleton中的Program.cs实例

builder.Services.AddSingleton<AppState>();

使用此设置,我可以在多个组件中@inject AppState并共享值,就像可以在一个组件中进行设置并在另一个组件中进行获取一样。一切顺利。刷新后,我丢失了SomeText属性中的值。

进一步搜索之后,我从article - Service Lifetimes in Blazor中注意到,

Blazor仅在客户端上运行,并刷新整页或 在新标签页中打开应用会创建一个新的 应用。

但是是否有任何解决方法或解决方案来保留该价值?我只想到浏览器localstorage。我做对了吗?请提出您的建议,如果我错了,请纠正我?

解决方法

重新加载页面相当于关闭应用程序并重新启动它,内存中的所有内容都消失了。

我自己没有使用过它,但是我听说@chrissainty的Blazored / localstorage很好。但是问题在于,您会遇到多个选项卡,将状态设置为冲突值。

因此,您要么需要进行选项卡间通信,要么可以通过事件完成 Communication between tabs or windows

不过,如果可能的话,请使用客户端作为用户界面,并使客户端与服务器(然后与数据库)通信以保持持久性。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...