Web サイトに検索用のテキストフィールドなどを配置する場合、入力内容と URL のクエリパラメーターを同期させると、ブラウザのブックマークなどで入力内容を保存することができます。
Svelte での実装例
下記は input
要素を 1 つだけ持つシンプルな Svelte ページコンポーネントの例です。
onMount()
でセットしたコールバック関数は、このコンポーネントがブラウザ上で表示されたときに呼び出されます。
このタイミングで、URL のクエリパラメーター(?q=ABC
)を参照し、テキストフィールドの値(query
変数)に反映しています。
input
要素の on:input
プロパティには、ユーザーがテキスト入力したときに呼び出されるイベントハンドラーを設定します。
このタイミングで URL 末尾のクエリパラメーターを同期させています。
ページ遷移を発生させずに URL だけ書き換えるには、$app/navigation
が提供する pushState()
か replaceState()
関数を使用できます。
pushState()
を使うと呼び出しごとにブラウザの履歴に積まれてしまうので、今回のケースでは replaceState()
を使った方がよさそうです。
これら実装により、ブックマークやリンクの URL に検索文字列を含めることができるようになります。
もちろん、ブラウザ上で URL を直接入力した場合も、input
要素に検索文字列が入力された状態でページを開くことができます。
便利! ٩(๑❛ᴗ❛๑)۶ わーぃ