Lightning Blog
Blazor記事イメージ画像

【Blazor】 コンポーネント間のイベント受け渡し方

更新日:2023/07/19
親コンポーネントから子コンポーネントの実行する処理を設定する方法について、解説していきます。

    目次

  • この記事で何ができるようになる?
  • コンポーネントの作成
  • コンポーネントの使い方
  • 実行して確認する

この記事で何ができるようになる?

セクション画像

ボタンなどのUI要素を含むコンポーネントを使う際に、使用するページ側でボタンの処理を書くことができます。 これにより、UIのデザインが同じで、処理が異なるコンポーネントをいくつも作る必要が無くなります。

実装イメージ
実装イメージ

コンポーネントの作成

セクション画像

今回は例として、ボタンが押下された際の処理を、親コンポーネントで設定できるようなボタンのコンポーネントを作成していきます。


@* イベントを返却する部品コンポーネント *@
<button class="btn btn-primary" @onclick="OnClickCallback">
    ボタン1
</button>

@code {

    [Parameter]
    public EventCallback<MouseEventArgs> OnClickCallback { get; set; }

}

コンポーネントからイベントを受け取れるようにするには、パラメータとしてEventCallbackを宣言します。 EventCallBackの<>内には引数にする変数の型を入れます。

今回は、イベント引数をそのまま返却値とするので、<>内はイベント変数であるMouseEventArgsとしています。

このEventCallBackが、親コンポーネント側で指定するボタンの処理を格納する変数になります。

EventCallbackがよくわからないという方は、EventCallbackは<>内の型を引数とするメソッドを格納するための変数 だと思ってください。

注意点として、 <>で指定する関係上、返却する変数は一つしか指定できません。複数指定したい場合は、クラスを作成して渡す必要があります。


コンポーネントの使い方

セクション画像

作成したボタンのコンポーネントをページ(親コンポーネント)で使ってみます。


@page "/eventcallback-parent"
@using Blazor_EventComponent.Components

<h1>EventCallbackサンプル</h1>

<EventCallbackComponent OnClickCallback="@ShowMessage1" />

<p>@message</p>

@code {
    private string message;

    private void ShowMessage1(MouseEventArgs e)
    {
        message = "ボタン1が押されました!";
    }
}

前回のセクションで作成したコンポーネント(EventCallbackComponent)では、 ボタンの処理をEventCallback<MouseEventArgs>というパラメータとして設定できるようにしました。

子コンポーネントのEventCallback<MouseEventArgs>パラメーターを指定するためには、 MouseEventArgsを引数とするメソッドしか格納することができません。 そのため、MouseEventArgsを引数とするShowMessage1メソッドを用意します。

ShowMessage1メソッドには、画面上のメッセージに 「ボタン1が押されました!」と表示する処理が書かれています。

EventCallbackComponentOnClickCallback属性に、ShowMessage1メソッドを指定します。 こうすることで、ボタンの処理としてShowMessage1メソッドが呼ばれるようになります。

これでソースコードは完成になります。 ここまでの処理で、ボタンをクリックした際に発生したイベント引数をトリガーにして、 親コンポーネントで行いたい処理を親コンポーネント側のソースで実装することができます。


実行して確認する

セクション画像

実行し、ボタンを押すと[ボタン1が押されました!]のメッセージが表示されるのが確認できます。

実行結果
実行結果

ブログ内の記事で書かれているサンプルコードは、GitHubから確認する事ができます。 是非参考にしてみてください。

この本では、Blazorの基本から高度なテクニックまで、実際のプロジェクトに役立つ知識を網羅しています。 初心者から経験者まで、Blazorを扱うすべての開発者にとっての必読書です。 この記事の執筆者も参考にした「Blazor入門」で、あなたのBlazorスキルを飛躍的に向上させませんか?

合わせて読みたい

カード画像
JavaScriptから.NETメソッド呼び出しの方法

BlazorとJavaScriptの相互運用について詳しく解説します。JavaScriptからBlazorの.NETメソッドを非同期で呼び出し、結果を取得・更新する具体的な方法をコード例で紹介。JavaScriptと.NETのシームレスな連携を実現します。

更新日:2024/06/06

カード画像
RazorファイルをHTMLとC#に分割する

Blazorはコンポーネント駆動フレームワークで、.razorファイルのHTMLとC#コードの分割方法(コードビハインド)を2つ紹介。一つは[Partialクラス]を使用し、もう一つは[継承]を利用。選択方法はプロジェクトの要件により変わるため、適切な方法を選ぶことがキーとなります。

更新日:2023/09/06

An error has occurred. This application may no longer respond until reloaded. Reload 🗙