假设我想要一个用户组中的用户具有同步视图的UI。想象一下一个小组聊天应用程序,小组中的每个人都应该看到完全相同的消息。
当用户向该组发布消息时,整个组都需要接收该消息。
使用JS,我可能会使用SignalR组,并让前端生成带有消息的SignalR事件。然后,服务器端集线器会将消息发送给该组。
在服务器端Blazor上,由于所有用户的状态都已在服务器上,我该如何协调更新Blazor上的用户组的UI?
答案 0 :(得分:2)
我试图实现类似的目标。一段时间后,我发现了一种方法。凯尔的回答帮助我弄清楚了。
您必须创建一个类,我们将其命名为 Messenger ,该类具有Action属性,并且一旦调用该方法便会调用此Action
public Action OnMessage { get; set; }
public void AddMessage(string message)
{
Text = message;
OnMessage?.Invoke();
}
在剃须刀组件中,注入Messenger。另外,您应该将事件设置为OnMessage属性,然后调用StateHasChanged以告知视图它可以更新
@inject Messenger messenger
// rest of component here, and then the code block
protected override async Task OnInitializedAsync()
{
messenger.OnMessage += () =>
{
// do something with the messenger.Text here
InvokeAsync(this.StateHasChanged);
};
}
别忘了,在您的Startup类中,将Messenger类添加为Singleton以便进行注入
services.AddSingleton<Messenger>();
我希望这是您要实现的目标,它也可以帮助其他人。 干杯。