gpt4 book ai didi

blazor - 带有 Blazor (WASM) 的 MediatR 通知 - 事件处理程序不更新 UI

转载 作者:行者123 更新时间:2023-12-03 20:48:22 34 4
gpt4 key购买 nike

我试图在客户端 Blazor 应用程序中连接 MediatR,纯粹是为了处理组件之间的事件通知。
该事件已发布,并由带有处理程序的单独组件获取,但我无法从处理程序更新 UI。
我相信原因是 MediatR 调用的处理程序与 UI 组件使用的处理程序不同。如果这有意义吗?
有人在 Blazor 中使用过 MediatR 通知吗?
发布组件:

@inject MediatR.IMediator _mediator

<h3>Sender</h3>

<button @onclick="SendNotification">Send notification</button>

@code {

private void SendNotification()
{
_mediator.Publish(new MyNotification { Message = "Hello World!" });
}

}
订阅组件:
@using MediatR;
@implements INotificationHandler<MyNotification>;

<h3>Receiver</h3>

<p>Message: @Message</p>

@code {

private string Message { get; set; } = "[No message]";

public Task Handle(MyNotification notification, System.Threading.CancellationToken cancellationToken)
{
Message = notification.Message; // <-- THIS DOES NOT UPDATE THE UI

return Task.CompletedTask;
}

}
通知:
public class MyNotification : INotification
{
public string Message { get; set; }
}
主要的:
public static async Task Main(string[] args)
{
var builder = WebAssemblyHostBuilder.CreateDefault(args);
builder.RootComponents.Add<App>("app");

builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) });
builder.Services.AddMediatR(typeof(Program));

await builder.Build().RunAsync();
}

最佳答案

这个想法是你的 Blazor应用程序应该听 MediatR命令和更新 UI一旦发生这种情况。为此,您需要:

  • 照顾好 state management事件由 MediatR 触发处理程序。
  • 让您的 Blazor组件订阅此事件并使用 StateHasChanged 刷新 UI - 您可以在 3 Ways to Communicate Between Components in Blazor 中看到“状态容器”示例文章。
  • 关于blazor - 带有 Blazor (WASM) 的 MediatR 通知 - 事件处理程序不更新 UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64351605/

    34 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com