Vite + TanStack Router - 4. パラメータの取り扱い
[vite]
[TanStack]
[TanStack Router]
今回はパスパラメータをサーチパラメータの取り扱いについてです。
パスパラメータ
createFileRoute
の引数(ルート名)はファイルを新規作成したタイミングで自動生成されます。
ルート名に$
で始まる部分がある場合、例えば/posts/$postId
のように記述すると、その部分がパスパラメータとなります。
パースされたパラメータはloader
やbeforeLoad
で{params}
として受け取ることができます。
コンポーネントでパラメータを参照するには、Route.useParams()
フックを使用します。
また、グローバルにエクスポートされているuseParams()
フックを使用することも可能です。
サーチパラメータ
クエリストリングはサーチパラメータとして自動的にパースされます。
パースされたパラメータはloaderDeps
やbeforeLoad
でsearch
として受け取ることができます。
たとえば post?sort=new
の場合以下のようになります。
コンポーネントでsearch
パラメータを参照するにはRoute.useSearch()
フックを使用します。
また、グローバルにエクスポートされているuseSearch()
フックも利用可能です。
サーチパラメータのバリデーション
ルートのオプションにvalidateSearch
プロパティを追加することで、バリデーションを行うことができます。
zodを使用する場合は、zodのスキーマを変換するzodValidator
を使用します。valibot/ArkTypeの場合はアダプターは必要ありません。
navigateによるロケーションバーの同期
useNavigate()
フックから得られるnavigate
はsearch
属性と同じ引数を受け取ります。navigate
にsearch
を渡すことで、プログラムでロケーションバーを書き換えることが可能です。
router.navigate()
と<Navigate search />
も同様に使用できます。
searchミドルウェア
__root.tsx
でサーチパラメータを書き換えるミドルウェアを利用できます。
まとめ
- パラメータにはパスパラメータとサーチパラメータがあります
- パラメータはローダーとコンポーネントで参照できます
search
パラメータはloader
では参照できません