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

Reactで条件検索をする時にURLへクエリパラメーターを付与したい

Posted at

Reactで条件検索をする時に、GETリクエストへパラメーターを含めて送信するだけでなくURLにも付与したいということがあると思います。
本記事では、検索時にURLへクエリパラメーターを付与する簡単な実装方法を紹介します。

実装方針

  • 最初の画面アクセス時は、URLから検索条件のクエリパラメーターを取得してGETリクエストのパラメーターに含める
  • 検索時は、GETリクエストのパラメーターに条件となる値を含め、URLにクエリパラメーターを付与する

具体的な実装

URLからクエリパラメーターを取得してGETリクエストにセット

最初のアクセス時に、URLから検索条件のクエリパラメーターを取得してGETリクエストに含めるための実装です。

const searchParams = new URLSearchParams(window.location.search);
const [text, setText] = useState<string>(searchParams.get('text'))
const [categories, setCategories] = useState<string[]>(searchParams.get('categories')?.split(',') || [])

useEffect(() => {
  // TODO: URLに含まれるクエリをGETリクエストにセットして実行
}, [])

検索時にURLへパラメーターを含める

検索時に実行される関数の中で、URLにクエリパラメーターを付与できるようにします。

const onSubmit = () => {
  const params = {}
  if (text) params['text'] = text
  if (categories) params['categories'] = categories
  
  const urlSearchParam =  new URLSearchParams(params).toString()
  navigate('/search?' + urlSearchParam)
}

URLに変化があったことを検知してGETリクエストを実行

ここまででURLの切り替えはできるようになりましたが、パスは/searchのままなので最初に実装したuseEffectは実行されません。
つまり、検索が実行されないということです。
そのため、window.location.hrefをuseEffectの第二引数に渡してクエリパラメーターが付与されたタイミングでGETリクエストを実行できるようにします。

const searchParams = new URLSearchParams(window.location.search);
const [text, setText] = useState<string>(searchParams.get('text'))
const [categories, setCategories] = useState<string[]>(searchParams.get('categories')?.split(',') || [])

useEffect(() => {
  // TODO: URLに含まれるクエリをGETリクエストにセットして実行
}, [window.location.href])

参考

1
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
1
0