
【Blazor】 コンポーネント間のイベント受け渡し方
- この記事で何ができるようになる?
- コンポーネントの作成
- コンポーネントの使い方
- 実行して確認する
目次
この記事で何ができるようになる?

ボタンなどの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が押されました!」と表示する処理が書かれています。
EventCallbackComponentのOnClickCallback属性に、ShowMessage1メソッドを指定します。 こうすることで、ボタンの処理としてShowMessage1メソッドが呼ばれるようになります。
これでソースコードは完成になります。 ここまでの処理で、ボタンをクリックした際に発生したイベント引数をトリガーにして、 親コンポーネントで行いたい処理を親コンポーネント側のソースで実装することができます。
実行して確認する

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

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

JavaScriptを呼び出し方
BlazorでWEB開発は主にHTML, CSS, C#を使用しますが、JavaScriptの利用も避けられない場面がある。JavaScriptをBlazor内で呼び出すためには、IJSRuntimeサービスを利用する。IJSRuntimeを用いることで、C#からJavaScriptの関数を非同期的に実行可能。例として、ボタンクリックでJavaScriptのアラートを表示する方法を説明。BlazorでのJavaScript使用は最小限に留めるべきだが、必要な場面での知識は重要。
更新日:2023/07/19

@refを使い方
Blazorの@refを用いてコンポーネント内のデータやメソッドにアクセスする方法を詳解。@refはBlazorコンポーネント参照のためのディレクティブで、親から子コンポーネントのメソッドやプロパティを操作できる。具体的な使用シナリオとしてフォームバリデーションやモーダルダイアログが挙げられるが、レンダリング後の使用や過度な依存を避けることが推奨される。
更新日:2023/09/05