1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【04】Next.js app routerのチュートリアルやってみる(レイアウトとページの作成)

Last updated at Posted at 2024-02-04

はじめに

Next.js app routerのチュートリアルの第4章のアウトプットします。

前の記事

【01】Next.js app routerのチュートリアルやってみる

https://qiita.com/naoyuki2/items/af58da3d20cbc790e767

【02】Next.js app routerのチュートリアルやってみる

https://qiita.com/naoyuki2/items/edf450b3ee135e83d1e8

【03】Next.js app routerのチュートリアルやってみる
https://qiita.com/naoyuki2/items/612221eac233aa9cbb74

第4章 レイアウトとページの作成

この章では下記を学習しました。

  • ファイルシステムルーティングを使用する。
  • 新しいルートセグメントを作成するときのフォルダーとファイルの役割を理解する。
  • 複数のページで共有されるレイアウトを作成する。
  • 部分レンダリングとは何かを理解する。

ファイルシステムルーティング

Next.jsではファイルシステムルーティングというシステムを採用しています。

下の画像のようにフォルダ名がそのままURLになっています。

image.png

ですが、ただフォルダを作ればルートができるというわけでもありません。

下の画像のようにフォルダの中にpage.tsxという名前のファイルを作成することでルートが作成されます。

ちなみにapp/page.tsxだけは、フォルダ名ではなく、/だけでアクセスできます。

image.png

layout.tsx

layout.tsx第2章で勉強したように、アプリケーション全体に共有されるものです。

ですが、下の画像のようにdashboardフォルダ直下に、layout.tsxを追加すると、

  • /dashboard/page.tsx
  • /dashboard/customers/page.tsx
  • /dashboard/invoices/page.tsx

の3つのファイルすべてに共有されます。

逆に言えば、dashboardフォルダ外のpage.tsxには共有されません。

image.png

/app/dashboard/layout.tsx
import SideNav from '@/app/ui/dashboard/sidenav'

export default function Layout({ children }: { children: React.ReactNode }) {
    return (
        <div className="flex h-screen flex-col md:flex-row md:overflow-hidden">
            <div className="w-full flex-none md:w-64">
                <SideNav />
            </div>
            <div className="flex-grow p-6 md:overflow-y-auto md:p-12">
                {children}
            </div>
        </div>
    )
}

  • /dashboard
  • /dashboard/customers
  • /dashboard/invoices

この3つのページでは、サイドバーを共通して表示したいので、layout.tsx<SideNav />という記述をしています。

また、{children}の中にそれぞれのページのレイアウトが入るといった感じです。

分かりづらいですが、下の画像のように、ページは違えど、サイドバーは共通して表示されていることが分かりますね。

image.png

そして、layout.tsxを使う利点はもう一つあります。

それは、page.tsxが更新されても、再レンダリングが起こらないことです。

これを部分レンダリングといいます。

下の画像のように、dashboard/settingから/dashboard/analyticsに移動しても、dashboard/layout.jsは共通であるため、layout.jsに対しては再レンダリングが起こりません。

image.png

おわりに

なかなか面白くなってきましたね。

次の記事

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?