131. hx-trigger Header(hx-triggerヘッダー:サーバーからイベントの「種」をまく)
原理:離れた場所にある要素への「遠隔操作」
HTMLを返さずに、アクションだけを起こす
HTMXの基本は「リクエストした場所を書き換える」ことですが、時には「メイン画面を更新したついでに、画面の端っこにある通知アイコンをピコッと光らせたい」とか「サイドバーを更新したい」ということがあります。
これまでは「OOB更新(079.)」で複数のHTMLを返していましたが、hx-trigger ヘッダーを使えば、HTMLそのものを返さずに、「イベントという名の信号」だけをサーバーから送ることができます。
ブラウザ側では、その信号を受け取って、好きな要素を好きなタイミングで動かすことができます。これが「サーバー主導のイベント発火」です。
実践:複数のパーツをインテリジェントに動かす
1. サーバーからイベント名を送る
サーバー側のプログラムで、レスポンスヘッダーに hx-trigger を含めます。
2. ブラウザ側でそのイベントを待ち構える
更新したい別の要素(サイドバーなど)で、from:body(ページ全体)からその名前のイベントが来るのを待ちます。
<!-- サイドバーの要素 -->
<div id="sidebar"
hx-get="/api/sidebar"
hx-trigger="refreshSideBar from:body">
<!-- サーバーからの合図を受けて、ここが最新に更新されます -->
</div>
3. ステップ・バイ・ステップ解説
- 信号の名前を決める: 「updateContent」や「showToast」など、分かりやすい名前を付けます。
- サーバーから送る: 処理が成功した瞬間のレスポンスヘッダーにその名前を書きます。
- ブラウザで受信する: 別の場所にある要素の
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)」をご紹介します。