コンテンツにスキップ

131. hx-trigger Header(hx-triggerヘッダー:サーバーからイベントの「種」をまく)

原理:離れた場所にある要素への「遠隔操作」

HTMLを返さずに、アクションだけを起こす

HTMXの基本は「リクエストした場所を書き換える」ことですが、時には「メイン画面を更新したついでに、画面の端っこにある通知アイコンをピコッと光らせたい」とか「サイドバーを更新したい」ということがあります。 これまでは「OOB更新(079.)」で複数のHTMLを返していましたが、hx-trigger ヘッダーを使えば、HTMLそのものを返さずに、「イベントという名の信号」だけをサーバーから送ることができます。

ブラウザ側では、その信号を受け取って、好きな要素を好きなタイミングで動かすことができます。これが「サーバー主導のイベント発火」です。


実践:複数のパーツをインテリジェントに動かす

1. サーバーからイベント名を送る

サーバー側のプログラムで、レスポンスヘッダーに hx-trigger を含めます。

/* サーバーからのレスポンス(ヘッダー) */
hx-trigger: refreshSideBar

2. ブラウザ側でそのイベントを待ち構える

更新したい別の要素(サイドバーなど)で、from:body(ページ全体)からその名前のイベントが来るのを待ちます。

<!-- サイドバーの要素 -->
<div id="sidebar" 
     hx-get="/api/sidebar" 
     hx-trigger="refreshSideBar from:body">
    <!-- サーバーからの合図を受けて、ここが最新に更新されます -->
</div>

3. ステップ・バイ・ステップ解説

  1. 信号の名前を決める: 「updateContent」や「showToast」など、分かりやすい名前を付けます。
  2. サーバーから送る: 処理が成功した瞬間のレスポンスヘッダーにその名前を書きます。
  3. ブラウザで受信する: 別の場所にある要素の hx-trigger 属性に、その名前を書きます。これで、サーバーからの合図一つで画面のあちこちが連動して動き始めます。

比較:OOB更新 vs hx-triggerヘッダー

OOB更新 (079.)

  • 方法: HTMLそのものを複数まとめて送りつける。
  • 用途: 更新したい内容がはっきり決まっている時。

hx-triggerヘッダー (今回)

  • 方法: 「更新しろ!」という名前(信号)だけを送る。
  • 利点: サーバーは中身を知らなくていい。ブラウザ側の各要素が、自分が必要なタイミングで自分のデータを取得しに行くため、設計がよりシンプルで綺麗(疎結合)になる。

まとめ:初心者のための「遠隔コントロール」

hx-trigger ヘッダーは、HTMXにおける「魔法の杖」のようなものです。

  • 一つで複数に届く: 一つのヘッダーで、複数の要素を同時に動かすことも、データの代わりに「音を鳴らす」JSを動かすこともできます。
  • JSONとの橋渡し: ヘッダーには { "showMessage": "保存成功!" } のように情報を添えることもできます。これをブラウザ側で受け取れば、より高度な通知などが作れます。
  • 一石二鳥: メイン画面のHTMLを返しつつ、裏でこのヘッダーを添える。これがHTMXアプリを「生きている」ように見せるコツです。

信号を送り、連動させる。hx-trigger ヘッダーという名の「目に見えない糸」を操って、画面上のバラバラなパーツたちが一つの生命体のように調和して動く、ダイナミックなWebアプリを構築してください。次の記事では、ページを力強くリセットする「hx-refresh(132. hx-refresh)」をご紹介します。