コンポーネントルートからのフレームワーク採用
<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
スクリプトを追加してアプリを実行する
次に、先に進む前に、この時点でアプリを起動できることを確認してください。
8. アプリのレンダリング
アプリのレンダリングを再開するために、前に設定したすべてのURLに一致する「キャッチオール」ルートを更新して、既存の<Routes>
がレンダリングされるようにします。
👉 アプリをレンダリングするようにキャッチオールルートを更新する
アプリは画面に戻り、通常どおり動作するはずです!
9. ルートをルートモジュールに移行する
これで、ルートをルートモジュールに段階的に移行できます。
次のような既存のルートがあるとします。
👉 ルート定義をroutes.ts
に追加する
👉 ルートモジュールを追加する
ルートモジュールAPIを使用してルートモジュールを編集します。
パラメーター、ローダーデータなどに対する自動生成されたタイプセーフティの設定については、タイプセーフティを参照してください。
最初のいくつかのルートの移行は最も困難です。なぜなら、以前とは少し異なる方法でさまざまな抽象化にアクセスする必要があるからです(フックやコンテキストではなく、ローダーなど)。しかし、最も難しい部分が処理されると、段階的な流れに入ります。
SSRとプリレンダリングを有効にする
サーバーレンダリングと静的プリレンダリングを有効にするには、バンドラープラグインのssr
オプションとprerender
オプションを使用できます。SSRの場合、サーバービルドをサーバーにデプロイする必要もあります。詳細については、デプロイを参照してください。