如何在Blazor服务器端更新多个用户?

时间:2020-01-11 17:36:58

标签: signalr blazor blazor-server-side

假设我想要一个用户组中的用户具有同步视图的UI。想象一下一个小组聊天应用程序,小组中的每个人都应该看到完全相同的消息。

当用户向该组发布消息时,整个组都需要接收该消息。

使用JS,我可能会使用SignalR组,并让前端生成带有消息的SignalR事件。然后,服务器端集线器会将消息发送给该组。

在服务器端Blazor上,由于所有用户的状态都已在服务器上,我该如何协调更新Blazor上的用户组的UI?

1 个答案:

答案 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>();

我希望这是您要实现的目标,它也可以帮助其他人。 干杯。