2
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?

お題は不問!Qiita Engineer Festa 2024で記事投稿!
Qiita Engineer Festa20242024年7月17日まで開催中!

クエリパラメーターの作成にはURLSearchParamsを使おう

Last updated at Posted at 2024-07-07

クエリパラメーター付きのURLパスを作成する時はどのように実装していますか?
まさか、文字列結合で作成しているということはありませんよね?

以前このような実装に出会したことがありますが、クエリパラメーターの数も多く非常に読みにくかった思い出があります。

sample1.js
const param1 = value1 !== undefined ? `param1=${value1}` : ''
const param2 = value2 !== undefined ? `param2=${value2}` : ''
const param3 = value3 !== undefined ? `param3=${value3}` : ''

const params = [
  param1,
  param2,
  param3
].filter((param: string) => param != '').join('&')

const pathWithParams = `/search?${params}` 

さらに、予期せぬ値がパラメーターのバリューに入る可能性もあり、脆弱なコードにもなっているため推奨できる実装ではありません。例えば、value1nullであるとき、param1=nullになる可能性があります。

そのため、クエリパラメーター付きのURLを作成するときは、URLSearchParamsインタフェースを使って実装することをおすすめします。

sample1.jsのコードを使って表現すると、このようになります。

const params = {}
if(value1) params[param1] = value1
if(value2) params[param2] = value2
if(value3) params[param3] = value3

const urlSearchParams =  new URLSearchParams(params).toString()
const pathWithParams = `/search?${urlSearchParams}` 

三項演算子でなくif文に変更したことと、filterjoinを取り除きURLSearchParamsを採用したことで読みやすくなったのではないでしょうか。
param1=nullとなることもなくなったので、元のコードより安全になりました。

2
0
1

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
2
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?