v6からのアップグレード
すべての将来のフラグを有効にしている場合、v7へのアップグレードには破壊的な変更はありません。これらのフラグを使用すると、アプリを一度に1つの変更ずつ更新できます。一度にすべてを行うのではなく、各ステップの後でコミットしてデプロイすることを強くお勧めします。
最新のv6.xにアップデート
まず、最新の将来のフラグとコンソール警告を取得するために、v6.xの最新のマイナーバージョンにアップデートします。
👉 最新のv6にアップデート
v7_relativeSplatPath
背景
dashboard/*
のような複数セグメントのスプラットパス(単なる*
に対して)の相対パスのマッチングとリンクを変更します。詳細はCHANGELOGをご覧ください。
👉 フラグを有効にする
フラグの有効化は、ルーターの種類によって異なります。
コードを更新する
<Route path="dashboard/*">
のようなパスとスプラットを持つルートで、その下に<Link to="relative">
または<Link to="../relative">
のような相対リンクがある場合、コードを更新する必要があります。
👉 <Route>
を2つに分割する
複数セグメントのスプラット<Route>
を、パスを持つ親ルートとスプラットを持つ子ルートに分割します。
👉 相対リンクを更新する
そのルートツリー内の<Link>
要素を更新して、同じ場所にリンクし続けるために追加の..
相対セグメントを含めます。
v7_startTransition
背景
これは、ルーターの状態更新にReact.useState
の代わりにReact.useTransition
を使用します。詳細はCHANGELOGをご覧ください。
👉 フラグを有効にする
👉 コードを更新する
コンポーネント内でReact.lazy
を使用していない限り、何も更新する必要はありません。
コンポーネント内でReact.lazy
を使用することは、React.useTransition
(またはコンポーネント内でPromiseを作成するその他のコード)と互換性がありません。React.lazy
をモジュールスコープに移動し、コンポーネント内でPromiseを作成することを停止します。これはReact Routerの制限ではなく、Reactの誤った使用方法です。
v7_fetcherPersist
<RouterProvider>
を使用していない場合は、これをスキップできます
背景
フェッチャーのライフサイクルは、所有者コンポーネントがアンマウントされるときではなく、アイドル状態に戻るときに基づいています。詳細はCHANGELOGをご覧ください。
フラグを有効にする
コードを更新する
アプリに影響を与える可能性は低いでしょう。useFetchers
の使用状況を確認したい場合があるかもしれません。それらは以前よりも長く持続する可能性があります。何をしているかによっては、以前よりも長く何かをレンダリングする可能性があります。
v7_normalizeFormMethod
<RouterProvider>
を使用していない場合は、これをスキップできます
これはformMethod
フィールドを大文字のHTTPメソッドに正規化して、fetch()
の動作と一致させます。詳細はCHANGELOGをご覧ください。
👉 フラグを有効にする
コードを更新する
コードの小文字のHTTPメソッドをチェックしている場合は、大文字のHTTPメソッドをチェックするように更新する必要があります(またはそれにtoLowerCase()
を呼び出します)。
👉 formMethod
を大文字と比較する
v7_partialHydration
<RouterProvider>
を使用していない場合は、これをスキップできます
これにより、SSRフレームワークは部分的なハイドレーションデータのみを提供できます。これについて心配する必要はほとんどなく、フラグをオンにするだけです。詳細はCHANGELOGをご覧ください。
👉 フラグを有効にする
コードを更新する
部分的なハイドレーションでは、初期ハイドレーション中にレンダリングするHydrateFallback
コンポーネントを提供する必要があります。さらに、以前にfallbackElement
を使用していた場合は、非推奨になったため削除する必要があります。ほとんどの場合、fallbackElement
をHydrateFallback
として再利用したいでしょう。
👉 fallbackElement
をHydrateFallback
に置き換える
v7_skipActionErrorRevalidation
createBrowserRouter
を使用していない場合は、これをスキップできます
このフラグが有効になっている場合、ローダーは、アクションが4xx
/5xx
ステータスコードのResponse
をスロー/返した後、デフォルトでは再検証されなくなります。これらのシナリオでは、shouldRevalidate
とactionStatus
パラメーターを介して再検証を選択できます。
👉 フラグを有効にする
コードを更新する
ほとんどの場合、アプリのコードを変更する必要はないでしょう。通常、アクションでエラーが発生した場合、データが変更され、再検証が必要になる可能性は低いでしょう。コードがアクションエラーのシナリオでデータを変更する場合は、2つのオプションがあります。
👉 オプション1:エラーシナリオでの変更を回避するためにaction
を変更する
👉 オプション2:shouldRevalidate
とactionStatus
を介して再検証を選択する
v7にアップグレード
アプリが最新の状態になったら、問題なくv7にアップデートできます(理論的には!)。
👉 v7をインストール
👉 react-router-dom
をreact-router
に置き換える
v7では、パッケージが簡素化されたため、"react-router-dom"
は不要になりました。"react-router"
からすべてをインポートできます。
package.json
には"react-router"
のみが必要です。
👉 インポートを更新する
これで、react-router
を使用するようにインポートを更新する必要があります。
インポートを手動で更新する代わりに、このコマンドを使用できます。ただし、予期しない動作になった場合に元に戻せるように、Gitのワーキングツリーがクリーンであることを確認してください。
👉 DOM固有のインポートを更新する
RouterProvider
とHydratedRouter
は、"react-dom"
に依存しているため、深いインポートから取得されます。
おめでとうございます。これでv7になりました!