0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

HTMXでSPAを構築する際に「戻るボタンが効かない」問題を解決する方法

Posted at

最近、フロントエンドの複雑さを抑えつつ、手軽に部分更新ができるHTMXを使ってSPA(Single Page Application)を構築するケースが増えています。
私もある業務アプリケーションでHTMXを活用して、ページ全体のリロードを避けたUI構築を行いました。
しかし、そこでひとつ問題に直面しました。

問題:ブラウザの「戻る」ボタンで正しく遷移できない

HTMXでは、hx-get や hx-post によってHTMLの一部を更新することができますが、その際にURLは自動では更新されません。
そのため、ユーザーが操作中に「戻る」ボタンを押しても、意図したページや状態に戻れない、というUX上の問題が起こります。
これは、HTMXがデフォルトではブラウザ履歴に遷移を記録しないためです。

解決策:URLの履歴を正しく扱う2つの方法

方法1:hx-push-url 属性を使って履歴にURLを追加する

hx-getなどで部分更新する際、hx-push-url属性を追加することで、履歴にURLを追加しつつページの一部だけを更新できます。

<a hx-get="/api/customer/{id}"
   hx-push-url="/customer/{id}"
   hx-target="#content">
   顧客詳細を見る
</a>

この例では、/api/customer/123 からデータを取得して #content に描画されますが、URLとしては /customer/123 に変化します。
これにより、ユーザーが「戻る」ボタンを押すと、正しく前の状態に戻ることができます。

方法2:hx-boost を使ってリンクやフォームをHTMXで処理する

もしページ内のほとんどのリンクやフォームをHTMXで処理したい場合は、hx-boost を活用するのも有効です。

<body hx-boost="true">
  <a href="/customer/{id}">顧客詳細</a>
</body>

このように書くと、リンククリック時にページ全体をリロードせずに、HTMXが内部で処理してくれます。そしてURLもちゃんと更新されます。
つまり、通常のSPAのような挙動をHTMXだけで実現できるわけです。

まとめ

HTMXでSPA的なページを作る際には、ブラウザ履歴の扱いに注意が必要です。
特に、「戻る」「進む」などのナビゲーションを正しく機能させるためには、hx-push-url や hx-boost の活用が不可欠です。
・個別対応には hx-push-url
・全体的な挙動変更には hx-boost

このように用途に応じて使い分けることで、HTMXによるシンプルかつ快適なSPA開発が可能になります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?