APIを用いた設計を行っているとURLパラメータを操作したいという状況に多々遭遇します。
古典的に、location.search
で取得した文字列を分割して、変換して・・・を繰り返していると、どこかで不具合にぶつかるものです。
URL
を用いることで、パラメータをスムーズに付け外しすることができると学んだので、備忘録として記載します。
URLの取得
new URL(location.href);
location.href
の部分にはもっと細かい書き方が多くありますが、既に付与されているパラメータをURLごと全て取得したいのであればこれが1番シンプルかなと思います。
APIを使う時など、現在のURLとは別に新しくURLを生成したいのであれば、
new URL('/api/xxx', 'https://example.com');
とすることで取得できます。
URLに反映するときは、
location.href = new URL(location.href);
で反映できます。
パラメータの追加
URLインターフェースで生成したURLからは、リンク要素と同じようにhref
やhash
を取得することができます。
パラメータに関してもsearch
で取得することができますが、?
から始まる文字列では使い勝手が悪いので、searchParams
を使用して取得します。
const url = new URL(location.href); // https://example.com?id=0
url.searchParams.set('id', '1') // https://example.com?id=1
url.searchParams.set('name', 'test') // https://example.com?id=1&name=test
url.searchParams.append('name', 'test') // https://example.com?id=1&name=test&name=test
set
は上書き、append
は既存に同じパラメータが存在したとしても新たに追加します。
その他
パラメータを削除するdelete
や、パラメータを持っているかを返すhas
なども存在します。
searchParams
を用いることで、?
や&
の付け忘れやエスケープによるヒューマンエラーも起きにくくなります。ソースコード上で何を行いたいのかも分かりやすくなります。
意外にも最近の技術ではなく、ほぼ全てのブラウザで対応している(IE除く)ので、どんどん使っていきたいですね。