コンポーネントルートからのフレームワーク採用
<RouterProvider>
を使用している場合は、代わりに RouterProvider からのフレームワーク採用 を参照してください。
<Routes>
を使用している場合は、ここが正しい場所です。
React Router Vite プラグインは、React Router にフレームワーク機能を追加します。このガイドは、アプリでプラグインを採用するのに役立ちます。問題が発生した場合は、Twitter または Discord でお問い合わせください。
機能
Vite プラグインは以下を追加します。
- ルートローダー、アクション、および自動データ再検証
- タイプセーフなルートモジュール
- 自動ルートコード分割
- ナビゲーション間の自動スクロール復元
- オプションの静的プリレンダリング
- オプションのサーバーレンダリング
初期設定には最も多くの作業が必要です。ただし、完了すると、新しい機能を一度に 1 つのルートずつ段階的に採用できます。
前提条件
Vite プラグインを使用するには、プロジェクトに以下が必要です。
- Node.js 20+ (Node をランタイムとして使用する場合)
- Vite 5+
1. Vite プラグインをインストールする
👉 React Router Vite プラグインをインストールする
👉 ランタイムアダプターをインストールする
ここでは、Node をランタイムとして使用していると仮定します。
👉 React プラグインを React Router に置き換える。
2. React Router 設定を追加する
👉 react-router.config.ts
ファイルを作成する
プロジェクトのルートに以下を追加します。この設定では、アプリディレクトリの場所や、今のところ SSR (サーバーサイドレンダリング) を使用しないなど、React Router にプロジェクトについて伝えることができます。
3. ルートエントリポイントを追加する
一般的な Vite アプリでは、index.html
ファイルがバンドルのエントリポイントです。React Router Vite プラグインは、エントリポイントを root.tsx
ファイルに移動するため、静的な HTML の代わりに React を使用してアプリのシェルをレンダリングし、必要に応じて最終的にサーバーレンダリングにアップグレードできます。
👉 既存の index.html
を root.tsx
に移動する
たとえば、現在の index.html
が次のようになっている場合:
そのマークアップを src/root.tsx
に移動し、index.html
を削除します。
4. クライアントエントリモジュールを追加する
一般的な Vite アプリでは、index.html
ファイルはクライアントエントリポイントとして src/main.tsx
を指します。React Router は代わりに src/entry.client.tsx
という名前のファイルを使用します。
👉 src/entry.client.tsx
をエントリポイントにする
現在の src/main.tsx
が次のようになっている場合:
それを entry.client.tsx
に名前変更し、次のように変更します。
createRoot
の代わりにhydrateRoot
を使用する<App/>
コンポーネントの代わりに<HydratedRouter>
をレンダリングする- 注:
<App/>
コンポーネントのレンダリングを停止しました。後のステップで戻しますが、まず新しいエントリポイントでアプリを起動できるようにします。
5. あれこれシャッフルする
root.tsx
と entry.client.tsx
の間で、それらの間でいくつかのものをシャッフルしたい場合があります。
一般的に:
root.tsx
には、コンテキストプロバイダー、レイアウト、スタイルなど、レンダリングに関するものが含まれています。entry.client.tsx
はできるだけ最小限にする必要があります- 既存の
<App/>
コンポーネントをまだレンダリングしようとしないことを忘れないでください。後のステップでそれを行います
root.tsx
ファイルは静的に生成され、アプリのエントリポイントとして提供されるため、そのモジュールのみがサーバーレンダリングと互換性がある必要があります。これが最も問題が発生する場所です。
6. ルートを設定する
React Router Vite プラグインは、routes.ts
ファイルを使用してルートを設定します。今のところ、物事を進めるために単純なキャッチオールルートを追加します。
👉 catchall.tsx
ルートを設定する
👉 プレースホルダーのルートをレンダリングする
最終的にはこれを元の App
コンポーネントに置き換えますが、今のところアプリを起動できることを確認するために、単純なものをレンダリングします。
routes.ts
ファイルの詳細については、ルートの設定に関するガイド を参照してください。
7. アプリを起動する
この時点で、アプリを起動してルートレイアウトを確認できるはずです。
👉 dev
スクリプトを追加してアプリを実行する
次に進む前に、この時点でアプリを起動できることを確認してください。
リポジトリで不要なファイルを追跡しないように、.react-router/
を .gitignore
ファイルに追加することをお勧めします。
パラメーター、ローダーデータなどの自動生成されたタイプセーフを完全に設定して使用する方法については、タイプセーフ を確認してください。
8. アプリをレンダリングする
アプリのレンダリングに戻るには、以前に設定したすべての URL に一致する「キャッチオール」ルートを更新して、既存の <Routes>
がレンダリングされるようにします。
👉 キャッチオールルートを更新してアプリをレンダリングする
アプリが画面に戻り、通常どおりに動作するはずです。
9. ルートをルートモジュールに移行する
ルートをルートモジュールに段階的に移行できるようになりました。
次のような既存のルートがある場合:
👉 ルート定義を routes.ts
に追加する
👉 ルートモジュールを追加する
ルートモジュール API を使用するようにルートモジュールを編集します。
パラメーター、ローダーデータなどの自動生成されたタイプセーフを設定する方法については、タイプセーフ を参照してください。
移行する最初のいくつかのルートは、以前とは少し異なる方法でさまざまな抽象化 (フックやコンテキストからではなく、ローダーなど) にアクセスする必要があることが多いため、最も困難です。しかし、最もトリッキーな部分が処理されると、段階的な溝に入ります。
SSR および/またはプリレンダリングを有効にする
サーバーレンダリングと静的プリレンダリングを有効にする場合は、バンドラープラグインの ssr
および prerender
オプションを使用して有効にできます。SSR の場合は、サーバービルドをサーバーにデプロイする必要もあります。詳細については、デプロイ を参照してください。