Vite + TanStack Router - 3. ルートの遷移

[vite]

[TanStack]

[TanStack Router]

ルート遷移には 4つの方法があります。ユーザーのクリックでページを移動する場合は1を使い、それ以外の場合に2〜4を使います。

とりあえず1と2だけ覚えておけば事足りると思います。

  1. <Link /> コンポーネントを使う
  2. useNavigate() フックを使う
  3. <Navigate /> コンポーネントを使う
  4. Router.navigate() APIを使う

<Link /> コンポーネントは <a /> タグに変換されます。

to属性

to に遷移先のパスを書きます。<a />タグのhrefにあたります。

<Link to="/posts">Posts</Link>

params属性

パスパラメータを渡す場合はparamsを使います。以下の例では http://localhost/posts/123 となります。

<Link to="/posts/$postId" params={{postId: '123'}}>Post 123</Link>

from属性

from には今いるページのパスを書きます。from属性は必須ではありません、toを相対パスにしたい場合に指定します。

const postIdRoute = createRoute({
path: '/blog/post/$postId',
})
const link = (
<Link from={postIdRoute.fullPath} to="../categories">
Categories
</Link>
)

また、from を書いておくと searchの型推定が速くなります。

https://tanstack.com/router/latest/docs/framework/react/guide/type-safety#narrow-to-relevant-routes-as-much-as-you-possibly-can

search 属性

サーチパラメータはsearch 属性に書きます。search属性にはオブジェクトもしくは関数を書きます。

以下の例では http://localhost/search?query=tanstack となります。

<Link
to="/search"
search={{ query: 'tanstack' }}
>
Search
</Link>

関数は前のパラメータを引数に受け取るので、一部だけ書きかえたいときに便利です。

<Link
to="."
search={
(prev) => ({
...prev,
page: prev.page + 1,
})
}
>
Next Page
</Link>

hash属性

ハッシュは hash で追加し、to="/post/111#title" のようには書きません。

activePropsinactiveProps

リンクがアクティブになったとき、非アクティブになったとき classNamestyleなどの属性を設定できます。オブジェクトまたは関数を指定できます。

classNamestyle のみは <Link /> で指定したものとマージされますが、その他の属性は上書きされます。

<Link
to="/section-1"
activeProps={
{
style: {
fontWeight: 'bold',
},
className: "active",
}
}
>
Section 1
</Link>

子要素にアクティブ状態を渡す

<Link /> の子要素として関数を定義すると、引数で isActive を受け取れます。

<Link to="/blog/post">
{({ isActive }) => {
return (
<>
<span>My Blog Post</span>
<icon className={isActive ? 'active' : 'inactive'} />
</>
)
}}
</Link>

2. useNavigateフック

フックを実行した戻り値のnavigate 関数を使ってページ遷移します。

const navigate = useNavigate({from: '/post/$postId'})
// ...
navigate({ to: '/posts/$postId', params: { postId } })

3. <Navigate /> コンポーネント

コンポーネントがマウントされたタイミングでページ遷移が起こります。

4. router.navigate API

useNavigateフックの戻り値と同じ、ただしrouterを参照できればどこでも使えます。

<MatchRoute />useMatchRoute()

to属性で指定したルートにマッチしたときだけに表示されるコンポーネントです。

pending 属性をつけるとページ遷移時に時間がかかる場合にページを読込中であることを表示するのに使えます。

表示・非表示を自動で切り替えてくれるので便利です。

linkOptions関数

linkOptions 関数を使うと <Link /> navigation redirect で共通で使えるオプションを作成できます。

まとめ

メモ:二流のプログラマのためのRust
[3Dモデル] エレコム ist用台座