📝

Next.js App Routerに関してメモ

に公開
  • 従来はクライアントでのデータフェッチ(SWR、TanstackQuery、React Router、GraphQL、tRPC)が主流。

  • Reactの推奨:https://ja.react.dev/reference/react/useEffect#what-are-good-alternatives-to-data-fetching-in-effects は3rdPartyライブラリの使用。

  • しかしバンドルサイズも増える。

  • データフェッチの通信回数とシンプルな設計はトレードオフ。

  • そこで登場したRSC:https://ja.react.dev/reference/rsc/server-components

  • App Routerでは、データフェッチはサーバーコンポーネントで行うのがベストプラクティス:https://nextjs.org/docs/app/building-your-application/data-fetching/fetching#fetching-data-on-the-server

    • バンドル前に事前にレンダリングされる。
    • 非同期関数をサポート、3rd Partyライブラリなしでデータフェッチ可能。
  • RSCとGraphQLは相性が悪い。

    • RSCとGraphQLの協調ナレッジが少ない、実装コスト/バンドルサイズの増大。
  • データフェッチは該当コンポーネントにコロケーション(適切な位置にコードを書くこと)すること。

    • App Routerでは末端のコンポーネントでデータフェッチをコロケーションするのが推奨。
    • Request Memoization:https://nextjs.org/docs/app/building-your-application/caching#request-memoization によってフェッチをメモ化出来るため、同じフェッチが複数回起きることはない。
    • 同一URL・同一オプションの指定が必要で、オプションが1つでも異なれば別リクエストが発生してしまう。
    • データフェッチ層は分離すること。
  • フェッチは並行化すると速度改善につながる。

    • データ間に依存関係がなく参照単位も異なる場合には、データフェッチを行うコンポーネント自体分割するのが良いらしい。

Discussion