RemixからReact Router v7にアップグレード

RemixからReact Router v7にアップグレード

先日、Remixを使って作り直した自分のサイトをReact Router v7にアップグレードする。

こちらの公式ドキュメントを参考にした。

https://react-router-docs-ja.techtalk.jp/upgrading/remix

futureフラグを有効化していたので、アップグレード自体は簡単にできた。

    remix({
      ssr: false,
      future: {
        v3_fetcherPersist: true,
        v3_relativeSplatPath: true,
        v3_throwAbortReason: true,
        v3_singleFetch: true,
        v3_lazyRouteDiscovery: true,
      },
    }),

依存関係の更新

まずは、パッケージ名や依存関係、コンポーネント名が変更になっているので、それを修正する必要がある。下記コマンドで一発更新できた。

npx codemod remix/2/react-router/upgrade
yarn install

tsconfig.jsonは更新されなかったので、下記のように修正。

{
  "include": [
    "env.d.ts", "**/*.ts", "**/*.tsx",
+   ".react-router/types/**/*"
  ],
  "compilerOptions": {
-   "types": ["@remix-run/node", "vite/client"],
+   "types": ["@react-router/node", "vite/client"],
    /* ... */
+   "rootDirs": [".", "./.react-router/types"]
  }
}

あとは、React Routerの型情報が.react-router/以下に出力されるので、これを.gitignore追加にする。

.react-router/

SPAモードの設定を修正

続いて、SPAモードで動かしていたので、react-router.config.tsを下記の内容で作成。

import { type Config } from '@react-router/dev/config';

export default {
  ssr: false,
} satisfies Config;

vite.config.tsは下記のように修正。

-declare module '@remix-run/node' {
-  interface Future {
-    v3_singleFetch: true;
-  }
-}

 export default defineConfig({
   plugins: [
-    remix({
-      ssr: false,
-      future: {
-        v3_fetcherPersist: true,
-        v3_relativeSplatPath: true,
-        v3_throwAbortReason: true,
-        v3_singleFetch: true,
-        v3_lazyRouteDiscovery: true,
-      },
-    }),
+    reactRouter(),

ファイルベースルーティングの設定

ファイルベースでルーティングを行っていたので、下記の内容で作成。

import { type RouteConfig } from '@react-router/dev/routes';
import { flatRoutes } from '@react-router/fs-routes';

export default flatRoutes() satisfies RouteConfig;

@react-router/fs-routesを追加。

yarn add -D @react-router/fs-routes

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です