Vite + TanStack Router - 8. その他の便利な機能

最後にTanStackRouterの便利な機能をいくつかご紹介します。

Devtools

画面上Routerの状態を表示するコンポーネントを追加できます。 あまり使うことはないと思いますが、contextの中身をみられるのは便利です。

  1. インストール
npm install -D @tanstack/router-devtools
  1. src/routes/__root.tsx でDevToolsを読み込む
import { Fragment, lazy, Suspense } from "react";
import { Outlet, createRootRoute } from "@tanstack/react-router";
const TanStackRouterDevtools =
process.env.NODE_ENV === "production"
? () => null // Render nothing in production
: lazy(() =>
// Lazy load in development
import("@tanstack/router-devtools").then((res) => ({
default: res.TanStackRouterDevtools,
// For Embedded Mode
// default: res.TanStackRouterDevtoolsPanel
})),
);
export const Route = createRootRoute({
component: RootComponent,
});
function RootComponent() {
return (
<Fragment>
<div>Hello "__root"!</div>
<Outlet />
<Suspense>
<TanStackRouterDevtools></TanStackRouterDevtools>
</Suspense>
</Fragment>
);
}
  1. npm run dev を実行すると、ブラウザの左下にDevToolsが表示されます。 devtools格納時

  2. DevToolsをクリックするとルーターの状態が見られるようになります。 devtools展開時

スクロール位置の復元

<ScrollRestoration /> コンポーネントを足すだけでページを戻った場合にスクロールの位置を復元できます。

<ScrollRestoration /> は deprecated になりました。代わりに createRouterscrollRestoration を使います。

import { createRouter } from '@tanstack/react-router'
const router = createRouter({
scrollRestoration: true,
})

Route Masking

ブラウザのロケーションバーに表示されるURLの一部を隠すことができます。

https://tanstack.com/router/latest/docs/framework/react/guide/route-masking

たとえば、

といった使い方をします。

ただし、以下の2つの操作をするとマスクが外れます。

このうち2番目のページリロードについては、マスクを維持する方法が3つあります。

GMailの「このページから離れますか?」と同様のダイアログを実現する仕組みです。

useBlocker というフックを使うだけで実現できます。

import { useBlocker } from '@tanstack/react-router'
function MyComponent() {
const [formIsDirty, setFormIsDirty] = useState(false)
useBlocker({
shouldBlockFn: () => {
if (!formIsDirty) return false
const shouldLeave = confirm('Are you sure you want to leave?')
return !shouldLeave
},
})
// ...
}

Eslintルール

TanStack Router用のルールがあるのでインストールしておくとよいでしょう。

https://tanstack.com/router/latest/docs/eslint/eslint-plugin-router

Static Route Data

Static Route Dataはルーター内部のグローバル定数のようなもので、これを使うと階層が下のルートで設定した値を上のルートで参照できるようになります。

現在どのページにいるかを共通ヘッダに表示したい場合などに使います。

Static Route Data https://tanstack.com/router/latest/docs/framework/react/guide/static-route-data

必要なパラメータが更新されたときだけルートを再レンダリングする

useSearch などのフックの引数に関数を渡して、必要な値だけを取り出すようにすると、その値が変更されたときのみコンポーネントが再レンダリングされます。

reduxなどの状態管理ライブラリと合わせて使うことの多いreselectのようなものです。

https://tanstack.com/router/latest/docs/framework/react/guide/render-optimizations#fine-grained-selectors

バーチャルファイルルート

バーチャルファイルルートを有効にすると、ファイルベースルーティングの振る舞いをオーバーライドできます。

ディレクトリ構造を無視してルートを設定したい場合に使いますが、ファイルベースルーティングの良さを消してしまうので乱用は禁物です。

Vite + TanStack Router - 7. データローダー
Astroのデプロイが Error: This request has been automatically failed because it uses a deprecated version of `actions/upload-artifact: v3` で落ちる