Next.js路由布局機(jī)制詳解
在 Next.js 的 App Router 中,布局文件 (layout.js
) 是逐層嵌套的,每一層的 layout
可以繼承上一層的 layout
,并通過(guò) children
來(lái)渲染下一層的內(nèi)容。這種機(jī)制允許頁(yè)面和布局之間的內(nèi)容自然遞歸嵌套,形成清晰的層次結(jié)構(gòu)。
個(gè)人總結(jié):在訪問(wèn) /dashboard時(shí),繼承父layout,同時(shí)children為自身目錄下的page.js。
目錄結(jié)構(gòu)示例
假設(shè)有以下項(xiàng)目目錄結(jié)構(gòu):
app/ layout.js // 全局布局 page.js // 根頁(yè)面 dashboard/ layout.js // Dashboard 模塊的布局 page.js // Dashboard 頁(yè)面 settings/ layout.js // Dashboard Settings 模塊的布局 page.js // Dashboard Settings 頁(yè)面
這里分為三層:
- 第一層是全局布局和頁(yè)面(
layout.js
+page.js
)。 - 第二層是 Dashboard 模塊(
dashboard/layout.js
+dashboard/page.js
)。 - 第三層是 Dashboard Settings 子模塊(
dashboard/settings/layout.js
+dashboard/settings/page.js
)。
各層代碼實(shí)現(xiàn)
1. 第一層:全局 layout.js
// app/layout.js export default function RootLayout({ children }) { return ( <html lang="en"> <body> <header>Global Header</header> <main>{children}</main> <footer>Global Footer</footer> </body> </html> ); }
功能: 包裹所有子內(nèi)容,提供全局的 Header 和 Footer。
2. 第二層:Dashboard 的 layout.js
// app/dashboard/layout.js export default function DashboardLayout({ children }) { return ( <div> <nav>Dashboard Sidebar</nav> <div>{children}</div> </div> ); }
功能: 增加 Dashboard 特有的布局,如側(cè)邊導(dǎo)航欄,渲染其子內(nèi)容。
3. 第三層:Dashboard Settings 的 layout.js
// app/dashboard/settings/layout.js export default function SettingsLayout({ children }) { return ( <div> <h2>Settings Section</h2> <div>{children}</div> </div> ); }
功能: 針對(duì) Settings 子模塊,添加獨(dú)立的布局部分,如模塊標(biāo)題。
4. 頁(yè)面內(nèi)容示例
根頁(yè)面 app/page.js:
export default function HomePage() { return <h1>Welcome to the Home Page</h1>; }
Dashboard 頁(yè)面 app/dashboard/page.js:
export default function DashboardPage() { return <h1>Dashboard Overview</h1>; }
Dashboard Settings 頁(yè)面 app/dashboard/settings/page.js:
export default function SettingsPage() { return <h1>Settings Content</h1>; }
渲染流程及繼承效果
訪問(wèn) /dashboard/settings 時(shí),頁(yè)面內(nèi)容會(huì)逐層嵌套:
- 第一層 RootLayout 渲染:
- 提供全局的 Header 和 Footer。
- 通過(guò) {children} 包裹下一層(Dashboard layout.js)。
- 第二層 DashboardLayout 渲染:
- 在全局布局中渲染 Dashboard 的側(cè)邊欄。
- 使用 {children} 包裹下一層(Settings layout.js)。
- 第三層 SettingsLayout 渲染:
- 在 Dashboard 布局中增加 Settings 的獨(dú)特標(biāo)題。
- 使用 {children} 渲染最終的頁(yè)面內(nèi)容。
- 頁(yè)面內(nèi)容 SettingsPage 渲染:
- 顯示 Settings 頁(yè)面的核心內(nèi)容。
最終結(jié)果
訪問(wèn) /dashboard/settings
時(shí)的完整 HTML 渲染結(jié)構(gòu)如下:
<html lang="en"> <body> <header>Global Header</header> <main> <div> <nav>Dashboard Sidebar</nav> <div> <h2>Settings Section</h2> <div> <h1>Settings Content</h1> </div> </div> </div> </main> <footer>Global Footer</footer> </body> </html>
總結(jié)
- 層層繼承: 每層的
layout.js
會(huì)通過(guò)children
自動(dòng)接收并渲染下一層的內(nèi)容。 - 靈活設(shè)計(jì): 每一層都可以添加自己獨(dú)特的 UI 元素,同時(shí)繼承上一層的布局。
- 自動(dòng)化管理: Next.js 的 App Router 自動(dòng)處理布局嵌套邏輯,無(wú)需手動(dòng)傳遞布局內(nèi)容。
到此這篇關(guān)于Next.js路由布局機(jī)制詳解的文章就介紹到這了,更多相關(guān)Next.js路由布局內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Vue3中createWebHistory和createWebHashHistory的區(qū)別詳析
這篇文章主要給大家介紹了關(guān)于Vue3中createWebHistory和createWebHashHistory區(qū)別的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2023-06-06Vue中Axios中取消請(qǐng)求及阻止重復(fù)請(qǐng)求的方法
為了防止用戶在網(wǎng)絡(luò)不好或者其他情況下短時(shí)間內(nèi)重復(fù)進(jìn)行接口請(qǐng)求,重復(fù)發(fā)送多次請(qǐng)求,本文主要介紹了Vue中Axios中取消請(qǐng)求及阻止重復(fù)請(qǐng)求的方法,感興趣的可以了解一下2022-02-02uni-app獲取當(dāng)前環(huán)境信息的方法
uni-aap提供了異步(uni.getSystemInfo)和同步(uni.getSystemInfoSync)的2個(gè)API獲取系統(tǒng)信息,這篇文章主要介紹了uni-app獲取當(dāng)前環(huán)境信息的相關(guān)知識(shí),需要的朋友可以參考下2022-11-11利用Vue實(shí)現(xiàn)卡牌翻轉(zhuǎn)的特效
這篇文章主要介紹了如何利用Vue實(shí)現(xiàn)一個(gè)春節(jié)抽???yè)面,采用了卡牌翻轉(zhuǎn)的形式。文中的實(shí)現(xiàn)方法講解詳細(xì),快跟隨小編一起學(xué)習(xí)一下吧2022-02-02vue+express 構(gòu)建后臺(tái)管理系統(tǒng)的示例代碼
這篇文章主要介紹了vue+express 構(gòu)建后臺(tái)管理系統(tǒng)的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-07-07解決vue3項(xiàng)目中el-menu不兼容SSR問(wèn)題
這篇文章主要介紹了解決vue3項(xiàng)目中el-menu不兼容SSR問(wèn)題,需要的朋友可以參考下2023-12-12Antd-vue Table組件添加Click事件,實(shí)現(xiàn)點(diǎn)擊某行數(shù)據(jù)教程
這篇文章主要介紹了Antd-vue Table組件添加Click事件,實(shí)現(xiàn)點(diǎn)擊某行數(shù)據(jù)教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-11-11vue elementui form表單驗(yàn)證的實(shí)現(xiàn)
這篇文章主要介紹了vue elementui form表單驗(yàn)證的實(shí)現(xiàn),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-11-11