Next.js13 AppRouter 勉強メモ

  • このエントリーをはてなブックマークに追加
  • LINEで送る

こんにちは!りょた(@Ryo54388667)といいます(^o^)

4/15日(土)にNext.jsの勉強会に参加してきたので、備忘録として書きました。

概要

  • 13.2あたりでアナウンス無しで命名変更された。旧AppDir extension。
  • appディレクトリ配下の新しいインターフェース。
  • appディレクトリ配下のディレクトリを「セグメント」と呼ぶ。セグメントにつき、特別な命名のファイルを作成すると自動的に構造が決定される。
    1. page.tsx…従来のpages配下のファイルの責務。
    2. error.tsx…エラーバウンダリーの責務。
    3. loading.tsx…suspenseのローディングの責務(suspenseのfallbackに渡される)。
    4. layout.tsx…レイアウトの責務。

Server Components

  • サーバーサイドで処理されるコンポーネント。
  • トップレベルでasync/await を利用できる(Promiseを解決できる)
export const FogeComp = async () => { const  data = await fetch(…) return (…) }//の記述が可能。
  • appディレクトリ配下ではコンポーネントを作成するとデフォルトでserver componentになる。
  • client コンポーネントにする場合はtsxファイルのトップに「use client」の記述が必要。
  • どんな処理をServer componentsで行い、Client Componentsで行うのか、という問いはこのページに記載されている。
  • 留意点
    1. stateを保持できない。
    2. シリアライズ可能なものしか、propsで渡すことができない。
    3. 関数はpropsで渡せない。
    4. CSS in JSは利用不可(ただしvanila-extractはNextjs13対応のためのPJが立ち上がっている)。現在、TailwindとCSS modulesのみ利用可能。



Cacheについて

  • SSR, SG, ISRのようなページタイプは、Nextjsによって拡張されたfetchメソッドのcacheの値でコントロールされるようになった。
    • 従来のgetServerSidePropsメソッド ==> fetch(“”, { cache: 'no-store' })
    • 従来のgetStaticSidePropsメソッド ==> fetch(“”, { cache: 'force-cache' })(<—これがデフォルト)
    • 従来のISR ==> fetch(https://..., { next: { revalidate: 60 } } })
  • revalidateプロパティの値のことを「revalidation frequency」という。
  • セグメントレベルでキャッシュすることも可能。//page.tsx ファイルのトップにexport const revalidate = 60の記述でセグメント単位でrevalidate可能。ただし、セグメント単位でexport const revalidate = 60を設定し、配下のファイルでfetch(“”, { cache: ‘no-store’ })またはfetch(“”, {next: ({revalidate: 0 }})とすると、revalidation frequencyが最も小さいものが適用される。この場合、revalidate: 0が適用される(SSRのセグメントになってしまう)。
  • コンポーネント単位のレンダリングタイプの指定はできない。セグメント単位のレンダリングタイプになっている。

Streaming SSR

  • SSRのメリットはサーバー側でフェッチできるが、デメリットとしてHTMLの生成が全て終了する必要があるので、その結果FCPが悪くなる。
  • 一部ずつレスポンスしていく技術。
  • layout.tsxのみ素早く返却し、処理の重いコンポーネントは順次返していく、という設計が可能になる。
  • デベロッパーツールのResponse Headerに「Transfer-Encoding: chunked」が指定されている。詳しくはこちら。
  • react18のselective HTMLに対応。詳しくはこちら
  • つい先日、AWS Lambdaも対応した。詳しくはこちら。

まだまだわからないことだらけです。。勉強せねば!!!

最後まで読んでいただき、ありがとうございます!

  • このエントリーをはてなブックマークに追加
  • LINEで送る