Blazor では、入れ子になった子コンポーネントでトリガーされたイベントやアクション (API 呼び出しの完了など) に基づいて、メイン ページのレイアウトを動的に更新したり、コンテンツを更新したりする必要がある状況がよく発生します。
次のシナリオを考えてみましょう:
上記のソリューションを実現するために、当社は次のテクノロジーを利用します:
ルート ページとそのサブコンポーネントの両方からアクセスできるように、取得した API データを保存および共有するためにスコープ指定されたサービス (AppState など) を使用します。
ページの読み込み時にスピナーを表示し、データの準備ができたらコンテンツを表示する、再利用可能な Loading.razor コンポーネントを定義します。
データを管理し、基礎となるデータが変更されたときに発生する ListChanged イベントを公開するビュー サービス (例: WeatherForecastViewService) を作成します。
子コンポーネントで、ビュー サービスを挿入し、その 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 中国語 Web サイトの他の関連記事を参照してください。