首页 >后端开发 >C++ >如何在 API 调用后从子组件刷新 .RAZOR 主页面?

如何在 API 调用后从子组件刷新 .RAZOR 主页面?

Susan Sarandon
Susan Sarandon原创
2025-01-09 19:42:41138浏览

How to Refresh a Main .RAZOR Page from Child Components After an API Call?

在 API 调用完成后,如何从子组件触发/刷新主 .RAZOR 页面

问题概述

当 API 调用完成且数据可用时,需要触发主 .RAZOR 页面的刷新。挑战在于找到一个“触发器”来指示数据已准备好并相应地启动页面刷新。

解决方案

1. 实现作用域服务 (AppState)

创建一个作用域服务 (AppState) 来管理返回的数据集,并使其可访问应用程序中的所有组件。

2. 显示组件 (SearchResults.razor)

在 SearchResults.razor 中,在页面加载时从 AppState 服务获取数据并在循环中显示它。当 API 返回数据时,使用 if 语句有条件地显示数据或加载微调器。

3. 集成子筛选组件

当用户从子组件应用筛选器时,在每个组件中使用以下代码:

<code class="language-csharp">string href = "/searchresults" + // 其他参数在此处 ...
NavigationManager.NavigateTo(href);</code>

这将在应用筛选器时始终重定向到 SearchResults.razor。

4. 利用状态/通知模式

实现状态/通知模式来广播 AppState 服务中的更改。这可以通过在子组件中使用以下方法来实现:

<code class="language-csharp">// FilterRazorComponent01.razor 中的示例
//...

public async Task OnSomeEventAsync()
{
    // 模拟一些 API 调用并触发数据更新
    await Task.Delay(3000);
    AppState.NotifyListChanged(AppState.Records, EventArgs.Empty);
    NavigationManager.NavigateTo(NavigationManager.Uri);
}</code>

5. 注册通知事件

在 SearchResults.razor 中,注册 AppState 的 ListChanged 事件,并在触发事件时调用 StateHasChanged 以触发刷新。

<code class="language-csharp">this.AppState.ListChanged += this.OnListChanged;
//...

private void OnListChanged(object sender, EventArgs e)
    => this.InvokeAsync(this.StateHasChanged);</code>

6. 处理子事件上的页面刷新

当子组件触发更新 AppState 的事件时,ListChanged 事件将被广播,SearchResults.razor 通过触发 StateHasChanged 来刷新页面以响应。这确保主页面根据筛选器组件中的更改更新其显示。

以上是如何在 API 调用后从子组件刷新 .RAZOR 主页面?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn