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スキルを飛躍的に向上させませんか?

合わせて読みたい

カード画像
コンポーネントについて

Blazorは.NET CoreベースのSPA作成フレームワークで、C#とHTMLを使用。この記事はBlazorとRazorコンポーネントの基本を紹介。Blazorアプリは[コンポーネント駆動]で、再利用可能な部品(.razor拡張子)から構成。コンポーネント名は大文字始まりが必要。また、HTMLとC#を組み合わせて、イベントハンドリングやデータバインディングが行える。

更新日:2023/09/06

カード画像
動的なコンポーネントの使い方

Blazorでの動的コンポーネントの使用方法を紹介。条件分岐でのコンポーネント切り替えをシンプルに実現し、ドロップダウンメニューで果物を選ぶと対応する果物のコンポーネントが表示される仕組みを示す。また、パラメータ渡しで果物の感想も表示可能。

更新日:2023/08/30

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