RouterProviderからのフレームワーク採用
<RouterProvider>
を使用していない場合は、代わりにコンポーネントルートからのフレームワーク採用を参照してください。
React Router Viteプラグインは、React Routerにフレームワーク機能を追加します。このガイドは、アプリでプラグインを採用するのに役立ちます。問題が発生した場合は、TwitterまたはDiscordでお問い合わせください。
機能
Viteプラグインは以下を追加します。
- ルートローダー、アクション、および自動データ再検証
- 型安全なルートモジュール
- 自動ルートコード分割
- ナビゲーション間の自動スクロール復元
- オプションの静的プリレンダリング
- オプションのサーバーレンダリング
初期設定には最も多くの作業が必要ですが、完了したら、新しい機能を段階的に採用できます。
前提条件
Viteプラグインを使用するには、プロジェクトに以下が必要です。
- Node.js 20+(Nodeをランタイムとして使用する場合)
- Vite 5+
1. ルート定義をルートモジュールに移動する
React Router Viteプラグインは独自のRouterProvider
をレンダリングするため、既存のRouterProvider
をその中にレンダリングすることはできません。代わりに、すべてのルート定義をルートモジュールAPIに一致するようにフォーマットする必要があります。
この手順には最も時間がかかりますが、React Router Viteプラグインを採用するかどうかとは関係なく、これを行うことでいくつかの利点があります。
- ルートモジュールは遅延読み込みされるため、アプリの初期バンドルサイズが小さくなります
- ルート定義が統一されるため、アプリのアーキテクチャが簡素化されます
- ルートモジュールへの移行は段階的であり、一度に1つのルートを移行できます
👉 ルート定義をルートモジュールに移動する
ルートモジュールAPIに従って、ルート定義の各部分を個別の名前付きエクスポートとしてエクスポートします。
👉 変換関数を作成する
ルートモジュール定義をデータルーターで期待される形式に変換するヘルパー関数を作成します。
👉 ルートモジュールを遅延読み込みして変換する
ルートモジュールを直接インポートする代わりに、遅延読み込みしてデータルーターで期待される形式に変換します。
ルート定義はルートモジュールAPIに準拠するだけでなく、ルートのコード分割の利点も得られます。
アプリの各ルートについてこの手順を繰り返します。
2. Viteプラグインをインストールする
すべてのルート定義をルートモジュールに変換したら、React Router Viteプラグインを採用できます。
👉 React Router Viteプラグインをインストールする
👉 ランタイムアダプターをインストールする
Nodeをランタイムとして使用していると仮定します。
👉 ReactプラグインをReact Routerと交換する
3. React Router設定を追加する
👉 react-router.config.ts
ファイルを作成する
プロジェクトのルートに追加します。この設定では、アプリディレクトリの場所や、現時点ではSSR(サーバーサイドレンダリング)を使用しないことなど、プロジェクトに関する情報をReact Routerに伝えることができます。
4. ルートエントリポイントを追加する
一般的なViteアプリでは、index.html
ファイルがバンドルのエントリポイントです。React Router Viteプラグインは、エントリポイントをroot.tsx
ファイルに移動するため、静的HTMLではなくReactを使用してアプリのシェルをレンダリングし、必要に応じてサーバーレンダリングにアップグレードできます。
👉 既存のindex.html
をroot.tsx
に移動する
たとえば、現在のindex.html
が次のようになっている場合。
そのマークアップをsrc/root.tsx
に移動し、index.html
を削除します。
👉 RouterProvider
より上のすべてをroot.tsx
に移動する
グローバルスタイル、コンテキストプロバイダーなどは、すべてのルートで共有できるようにroot.tsx
に移動する必要があります。
たとえば、App.tsx
が次のようになっている場合。
RouterProvider
より上のすべてをroot.tsx
に移動します。
5. クライアントエントリモジュールを追加する(オプション)
一般的なViteアプリでは、index.html
ファイルはクライアントエントリポイントとしてsrc/main.tsx
を指しています。React Routerは代わりにsrc/entry.client.tsx
という名前のファイルを使用します。
entry.client.tsx
が存在しない場合、React Router Viteプラグインはデフォルトの非表示のものを使用します。
👉 src/entry.client.tsx
をエントリポイントにする
現在のsrc/main.tsx
が次のようになっている場合。
entry.client.tsx
に名前を変更し、次のように変更します。
createRoot
の代わりにhydrateRoot
を使用する
<App/>
コンポーネントの代わりに<HydratedRouter>
をレンダリングする
- 注:ルートを作成して
<RouterProvider />
に手動で渡すことはなくなりました。次の手順でルート定義を移行します。
6. ルートを移行する
React Router Viteプラグインは、routes.ts
ファイルを使用してルートを構成します。形式はデータルーターの定義と非常によく似ています。
👉 定義をroutes.ts
ファイルに移動する
ルート定義をroutes.ts
に移動します。スキーマは完全に一致しないため、型エラーが発生します。これは次に修正します。
👉 lazy
ローダーをfile
ローダーに置き換える
ルートの構成に関するガイドを参照して、routes.ts
ファイルと、ルート定義をさらに簡素化するヘルパー関数について詳細を確認してください。
7. アプリを起動する
この時点で、React Router Viteプラグインに完全に移行する必要があります。dev
スクリプトを更新してアプリを実行し、すべてが機能していることを確認してください。
👉 dev
スクリプトを追加してアプリを実行する
次に、先に進む前に、この時点でアプリを起動できることを確認します。
SSRとプリレンダリングを有効にする
サーバーレンダリングと静的プリレンダリングを有効にするには、バンドラープラグインのssr
オプションとprerender
オプションを使用できます。SSRの場合、サーバービルドをサーバーにデプロイする必要もあります。詳細については、デプロイを参照してください。