この記事は個人ブログと同じ内容です
Next.js の Layout 周りのドキュメントが新しく追加されました。
単一のレイアウトを扱う場合
単一のレイアウトで十分な場合はカスタマイズした <Layout/>
で <Component />
タグを囲むだけで実装できます。
// pages/_app.js import Layout from '../components/layout' export default function MyApp({ Component, pageProps }) { return ( <> // Layout でアプリケーションのコンポーネントを囲むだけ <Layout> <Component {...pageProps} /> </Layout> </> ) }
ページごとに異なるレイアウトを扱う場合
ページごとに異なるレイアウトが必要な場合は getLayout
でページごとにレイアウトを定義します。
getLayout
を使用してレイアウトの切り替えを行うことで、コンポーネントツリーがページ遷移間で維持されるため永続的にレイアウト内の state を保持することができます。
コンポーネントツリーが維持されると React は state を維持しつつ、必要な要素のみ再レンダリングします。
// pages/index.js import Layout from '../components/layout' import NestedLayout from '../components/nested-layout' export default function Page() { return { /** Your content */ } } // 個別のページごとにレイアウトを定義する Page.getLayout = (page) => ( <Layout> <NestedLayout>{page}</NestedLayout> </Layout> )
// pages/_app.js export default function MyApp({ Component, pageProps }) { // ページごとに定義されたレイアウトがある場合はそれを使用する const getLayout = Component.getLayout || ((page) => page) return getLayout(<Component {...pageProps} />) }
データフェッチ
Layout 内でのデータフェッチはクライアント側でのみ可能です。
Layout はページではないため、今のところ getStaticProps
、getServerSideProps
は使えません。
プレビュー
Next.js 公式リポジトリのサンプルがわかりやすいのでぜひ触ってみてください。