Next.js13によりアプデした内容をまとめた
Nao

Nao

Nov 05 2022

Next.js13によりアプデした内容をまとめた

Nextjs13のアプデ内容まとめ

Next.jsの最大の強みといえば、page/ディレクトリにより自動でルーティングしてくれるところ。

reactの場合、react-router-domを使ってルーティングの設定を手動で行っていたが、その必要がないのがほんとに便利!

バージョン13ではさらにapp/ディレクトリという仕組みを追加した。 主な変更点は以下。

Layouts

全体の枠組みのレイアウトコンポーネントを書くことができるようになった。

部分的にも可能に! ⁠例えば、app/articles/Layout.tsxにすると、articles以下のディレクトリにLayout.tsxで記述したレイアウトが適用される!

Server Components

クライアントに送信されるデータ量を減らして初期のページロードを高速化するようになった。

ページ単位からコンポーネント単位でのpre-rendringが可能になった。

Streaming

ページ全体のロードを待たずにユーザーは操作可能。

以前は一部のデータをフェッチするために、ページ全体がロードされてしまいユーザーが操作可能になるまでに時間がかかっていた。

Data Fetching

今まで

export default function Page({ data }) { // dataを表示するコンポーネント } // 以下でgetServerSideProps やgetStaticPropsでfetch export async function getServerSideProps() { const res = await fetch(`https:~`) const data = await res.json() return { props: { data } } }

13からは、getStaticPropsやgetServerSidePropsではなく「async function getData()」でfetchする。

デフォルトではSSG。

以下のように、dataをfetchする。

export async function getData() { const response = await fetch(`https://~`); const data: Data = await response.json(); return data; }

表示したいコンポーネント

// 'use client'と明示するとクライアントサイドレンダリングになる export default async function DisplayPage() { const data = await getData(); return ( <div> {data.title} </div> ); }

loadingコンポーネントを挟む

export default function AsyncLoading() { return ( <> <div> <Suspense fallback={<p>loading...</p>}> <DisplayPage /> </Suspense> </div> </> ); }

SSGやSSRなどレンダリング手法を指定したい時

・SSGの指定方法

export async function getData() { const response = await fetch(`https://~`, { cache: 'force-cache' }); const data: Data = await response.json(); return data; }

・SSRの指定方法

export async function getData() { const response = await fetch(`https://~`, { cache: 'no-store' }); const data: Data = await response.json(); return data; }

・ISRの指定方法

export async function getData() { const response = await fetch(`https://~`, { next: { revalidate: 10 } }); const data: Data = await response.json(); return data; }

Linkタグについて

LInkタグの中に、aタグを挿入する必要がなくなった。

↓のような感じ

/* 12 */ <Link href="/link"> <a>リンク</a> </Link> /* 13 */ <Link href="/link"> リンク </Link>

まだ、アプデ内容を導入して開発したことがないので、これからどんどん使っていこうと思う!!

Nao

Nao

Hi ! My name is Nao, currently a third-year student at Aoyama Gakuin University. I'm a member of the Miyaji Lab.

CommentsForm

Related Posts

Categories