signalr - 如何在 Blazor 服务器端更新多个用户?
问题描述
假设我想要一个用户界面,其中组中的用户具有同步视图。想象一个群聊应用程序,群中的每个人都应该看到完全相同的消息。
当用户向群组发布消息时,整个群组都需要接收它。
使用 JS,我可能会使用 SignalR 组,并让前端生成一个 SignalR 事件并发布一条消息。然后,服务器端集线器将该消息发送到该组。
在服务器端 Blazor 上,由于所有用户的状态都已经在服务器上,我将如何协调更新 Blazor 上用户组的 UI?
解决方案
我试图实现类似的目标。一段时间后,我发现了一种方法。凯尔的回答帮助我弄清楚了。
您必须创建一个类,让我们调用Messenger,它有一个 Action 属性,以及一个调用此 Action 的方法
public Action OnMessage { get; set; }
public void AddMessage(string message)
{
Text = message;
OnMessage?.Invoke();
}
在 razor 组件中,注入 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>();
我希望这就是你想要实现的目标,它也可以帮助其他人。干杯。
推荐阅读
- python - Python中特定方式的数字总和
- typescript - 一种将字符串联合分配给另一个类型的方法
- javascript - 如何从 JSON 响应解码客户端的 Base64 文件?
- api - 获取 github API 结果超过 100
- video - 使用 webdriverio 浏览器对象如何检查视频是否正在播放
- javascript - TypeError:无法读取未定义的 reactjs url 的属性“用户名”
- c# - 更改链接到单个函数 C# 的按钮的前景色
- javascript - react中的子组件阻止父组件导入redux store
- sql - Informatica Powercenter 中的源限定符 SQL 查询
- python - 获取关于距离的亮度级别(python)