在 API 调用后从 Blazor 中的子组件刷新 Razor 主页面需要状态管理方法。 Blazor 内置的更改检测机制不会自动更新父组件,除非其数据属性发生更改。 以下是如何使用状态/通知模式实现强大的解决方案:
为了实现这一目标,我们将使用一项服务来管理应用程序状态,将其注入到主页及其子组件中。 子组件在 API 调用后会触发该服务中的通知,提示 UI 更新。
1。创建状态管理服务:
该服务将保存数据和通知订阅者更改的机制。 为此,我们将使用 EventCallback
。
<code class="language-csharp">using Microsoft.AspNetCore.Components; public class StateService { public event Action StateChanged; // Your application state data public string DataFromAPI { get; set; } = ""; public void NotifyStateChanged() { StateChanged?.Invoke(); } }</code>
2。将服务注入组件:
将 StateService
注入 Razor 主页面和进行 API 调用的子组件。
<code class="language-csharp">@inject StateService StateService // In both the main page and sub-components</code>
3。子组件中的 API 调用和状态更新:
在您的子组件中,成功调用 API 后,更新 StateService
的数据并通知更改。
<code class="language-csharp">@code { protected override async Task OnInitializedAsync() { string apiData = await FetchDataFromAPI(); // Your API call StateService.DataFromAPI = apiData; StateService.NotifyStateChanged(); } // ... your API call method ... private async Task<string> FetchDataFromAPI() { // Your API call logic here return await Task.FromResult("Data from API"); } }</code>
4。更新剃刀主页:
在 Razor 主页面中,显示来自 StateService
的数据。 当 StateService.DataFromAPI
更改时,Blazor 将自动重新渲染此部分,因为它是组件的属性。
<code class="language-csharp">@page "/" @inject StateService StateService <h1>Main Page</h1> <p>@StateService.DataFromAPI</p> <MySubComponent /></code>
重要注意事项:
async
和 await
异步处理 API 调用,以防止阻塞 UI 线程。此模式确保任何子组件中的更改都会通过更新共享状态并通知系统更改来触发主页中的更新。 主页会自动重新呈现,因为它绑定到服务的数据。 这可以避免在父组件中手动调用 StateHasChanged
,这种类型的更新通常不鼓励这样做。
以上是如何在 Blazor 中调用 API 后从子组件刷新 Razor 主页面?的详细内容。更多信息请关注PHP中文网其他相关文章!