In Blazor stoßen wir häufig auf Situationen, in denen wir das Hauptseitenlayout dynamisch aktualisieren oder Inhalte basierend auf Ereignissen oder Aktionen aktualisieren müssen, die in verschachtelten untergeordneten Komponenten ausgelöst werden (z. B. Abschluss von API-Aufrufen).
Stellen Sie sich das folgende Szenario vor:
Um die oben genannten Lösungen zu erreichen, nutzen wir die folgenden Technologien:
Wir verwenden bereichsbezogene Dienste (wie AppState), um die abgerufenen API-Daten zu speichern und freizugeben, sodass sowohl die Stammseite als auch ihre Unterkomponenten darauf zugreifen können.
Wir definieren eine wiederverwendbare Loading.razor-Komponente, die den Spinner anzeigt, wenn die Seite geladen wird, und den Inhalt, wenn die Daten bereit sind.
Wir erstellen einen Ansichtsdienst (z. B. WeatherForecastViewService), der die Daten verwaltet und ein ListChanged-Ereignis verfügbar macht, das ausgelöst wird, wenn sich die zugrunde liegenden Daten ändern.
In der untergeordneten Komponente fügen wir den Ansichtsdienst ein und überwachen sein ListChanged-Ereignis. Nachdem eine Änderung erkannt wurde, verwenden wir StateHasChanged, um die Komponente zu aktualisieren und die aktualisierten Daten anzuzeigen.
Auf der Hauptseite von 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>
Durch die Implementierung dieser Techniken richten wir einen Kommunikationskanal zwischen untergeordneten Komponenten und der Hauptseite ein, der es uns ermöglicht, Aktualisierungen der Benutzeroberfläche auszulösen und einen konsistenten Datenstatus über alle Eltern-Kind-Beziehungen hinweg aufrechtzuerhalten.
Das obige ist der detaillierte Inhalt vonWie aktualisiere ich eine Blazor-Haupt-Razor-Seite aus untergeordneten Komponenten nach einem API-Aufruf?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!