问题描述
我练习和学习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
不过,如果可能的话,请使用客户端作为用户界面,并使客户端与服务器(然后与数据库)通信以保持持久性。