【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スキルを飛躍的に向上させませんか?
合わせて読みたい

DOMイベント一覧
この記事では、Blazorで使用可能なDOMイベントに関する包括的なガイドを提供しています。DOM(Document Object Model)はウェブページの内容や構造を表現するための仕組みであり、Blazorを用いることで、さまざまなDOMイベントを効果的に扱うことが可能です。記事は、onabortからonwheelまで、様々なイベントの名前と発生条件を詳細な表形式で紹介しています。これにより、Blazor開発者は適切なイベントを状況に応じて選択し、ウェブページのインタラクティビティを高めることができます。
更新日:2023/09/03

属性スプラッティングの使い方
Blazorの属性スプラッティング機能は、コンポーネントに複数の属性を一括で適用し、コードの再利用性を向上させるための手段です。基本的には、@attributesを使用し、属性と値のペアを格納したIDictionary<string, object>型を渡します。非文字列型の属性値もサポートしており、コンポーネントでも属性スプラッティングが利用可能です。ただし、属性の優先度に注意が必要です。これにより、Blazorアプリケーションの開発効率と柔軟性が向上します。
更新日:2023/07/19