在 Blazor 中,我们经常会遇到需要根据嵌套子组件中触发的事件或操作(例如 API 调用完成)动态更新主页面布局或刷新内容的情况。
考虑以下场景:
为了实现上述解决方案,我们利用以下技术:
我们使用作用域服务(例如 AppState)来存储和共享检索到的 API 数据,以便根页面及其子组件都能访问。
我们定义一个可重用的 Loading.razor 组件,在页面加载时显示微调器,数据准备就绪时显示内容。
我们创建一个视图服务(例如 WeatherForecastViewService),它管理数据并公开一个 ListChanged 事件,当基础数据更改时触发该事件。
在子组件中,我们注入视图服务并监控其 ListChanged 事件。检测到更改后,我们使用 StateHasChanged 来刷新组件并显示更新后的数据。
在主 SearchResults.razor 页面中,我们:
<code class="language-csharp">@code { [Inject] WeatherForecastViewService viewService { get; set; } // API 调用完成后赋值为 true public bool IsLoaded { get; set; } protected override async Task OnInitializedAsync() { await GetForecastsAsync(); this.viewService.ListChanged += this.OnListChanged; } private async Task GetForecastsAsync() { // 代码省略,为简洁起见 } private void OnListChanged(object sender, EventArgs e) => this.InvokeAsync(this.StateHasChanged); public void Dispose() { this.viewService.ListChanged -= this.OnListChanged; } }</code>
<code class="language-csharp">@if (this.IsLoaded) { @this.ChildContent } else { // 显示加载微调器 }</code>
通过实现这些技术,我们建立了子组件和主页面之间的通信通道,使我们能够触发 UI 更新并在父子关系中保持一致的数据状态。
以上是如何在 API 调用后从子组件刷新 Blazor 主 Razor 页面?的详细内容。更多信息请关注PHP中文网其他相关文章!