Next.js App Router のリリースに伴い、多くの開発者が既存のプロジェクトの移行を熱望しています。この投稿では、主な課題、変更点、プロセスをよりスムーズにする方法など、プロジェクトを Next.js App Router に移行した私の経験を共有します。
これは段階的なアプローチであり、ページ ルーターとアプリ ルーターを同時に使用できます。
App Router にはいくつかの利点があります:
移行することで、アプリケーションを将来にわたって保証し、最新の Next.js 機能を活用できます。
最初のステップは、Next.js と関連する依存関係が最新であることを確認することです。次のコマンドを実行して、Next.js と React の最新バージョンをインストールします:
npm install next@latest react@latest react-dom@latest npm install -D eslint-config-next@latest
App Router は、ルート、メタデータ、レイアウトを管理するために新しいアプリ ディレクトリに依存します。構造化する方法は次のとおりです:
アプリ フォルダー: ページをアプリ フォルダーに移動します。各ルートには、page.tsx ファイルを含む独自の専用フォルダーが存在します。
レイアウト: アプリの特定のセクションのレイアウトを定義するには、layout.tsx ファイルを追加します。これは、ナビゲーション バーやフッターなどの共有コンポーネントを処理する場合に特に便利です。
最も重要な変更の 1 つは、ルーティングおよびナビゲーション機能の next/router が next/navigation に置き換えられたことです。
すべての next/router インポートを next/navigation に置き換えます。
useRouter などの関数を、必要に応じて usePathname、useSearchParams、useRouter() などの新しい同等の関数で更新します。
getServerSideProps と getStaticProps は App Router では非推奨になりました。
サーバー側ページでのデータ取得には、非同期サーバー コンポーネントまたはサーバー アクションを使用します。
export async function getData() { const res = await fetch('https://getData.com/data'); return res.json(); }
クライアントコンポーネント:
React フック、ブラウザ API、またはユーザー インタラクションを使用するコンポーネントはすべて、「クライアントを使用」とマークする必要があります。これにより、Next.js にクライアント側でレンダリングするよう指示されます。
サーバーコンポーネント:
ブラウザとの対話を必要としないコンポーネントは、サーバー コンポーネントとして残すことができます。これらは、不要な JavaScript をクライアントに送信することを避けるため、より効率的です。
React Query、AntDesign、フレーマーなどの外部ライブラリを使用している場合は、それらを更新し、必要に応じて変更を加える必要があります。このブログにすべての変更を含めることはできません。ただし、変更点はドキュメントに記載されています。
next/router から next/navigation への変更に伴い、ルーター イベントの処理には異なるアプローチが必要になる可能性があります。
ルーターのイベント リスナーまたはフックを適宜更新してください。
複雑なレイアウト (特にアニメーションを含むページ) を移行する場合、レイアウトの変化に気づくことがあります。レイアウトのずれを防ぐために、プレースホルダーを追加するか、サーバー側自体で適切な配置を維持してください。
App Router により、画像コンポーネントとリンク コンポーネントに変更が加えられます。
codemod を使用してコンポーネントを自動的に更新します。
画像コンポーネントの場合は、response.
フレーマー、スワイパー、戦利品ファイルなどのアニメーション関連のコンポーネントはクライアント側に保持する必要があります。
Next.js App Router への移行には課題もありますが、パフォーマンス、スケーラビリティ、柔軟性が大幅に向上します。移行を管理可能なセクション (アプリレベル、ページレベル、機能更新) に分割することで、各変更に体系的に取り組むことができました。
ご自身の移行に関する質問やヒントがあれば、ぜひお知らせください。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3