Next.js路由布局機(jī)制詳解
在 Next.js 的 App Router 中,布局文件 (layout.js) 是逐層嵌套的,每一層的 layout 可以繼承上一層的 layout,并通過 children 來渲染下一層的內(nèi)容。這種機(jī)制允許頁面和布局之間的內(nèi)容自然遞歸嵌套,形成清晰的層次結(jié)構(gòu)。
個(gè)人總結(jié):在訪問 /dashboard時(shí),繼承父layout,同時(shí)children為自身目錄下的page.js。
目錄結(jié)構(gòu)示例
假設(shè)有以下項(xiàng)目目錄結(jié)構(gòu):
app/
layout.js // 全局布局
page.js // 根頁面
dashboard/
layout.js // Dashboard 模塊的布局
page.js // Dashboard 頁面
settings/
layout.js // Dashboard Settings 模塊的布局
page.js // Dashboard Settings 頁面這里分為三層:
- 第一層是全局布局和頁面(
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. 頁面內(nèi)容示例
根頁面 app/page.js:
export default function HomePage() {
return <h1>Welcome to the Home Page</h1>;
}Dashboard 頁面 app/dashboard/page.js:
export default function DashboardPage() {
return <h1>Dashboard Overview</h1>;
}Dashboard Settings 頁面 app/dashboard/settings/page.js:
export default function SettingsPage() {
return <h1>Settings Content</h1>;
}渲染流程及繼承效果
訪問 /dashboard/settings 時(shí),頁面內(nèi)容會(huì)逐層嵌套:
- 第一層 RootLayout 渲染:
- 提供全局的 Header 和 Footer。
- 通過 {children} 包裹下一層(Dashboard layout.js)。
- 第二層 DashboardLayout 渲染:
- 在全局布局中渲染 Dashboard 的側(cè)邊欄。
- 使用 {children} 包裹下一層(Settings layout.js)。
- 第三層 SettingsLayout 渲染:
- 在 Dashboard 布局中增加 Settings 的獨(dú)特標(biāo)題。
- 使用 {children} 渲染最終的頁面內(nèi)容。
- 頁面內(nèi)容 SettingsPage 渲染:
- 顯示 Settings 頁面的核心內(nèi)容。
最終結(jié)果
訪問 /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ì)通過children自動(dòng)接收并渲染下一層的內(nèi)容。 - 靈活設(shè)計(jì): 每一層都可以添加自己獨(dú)特的 UI 元素,同時(shí)繼承上一層的布局。
- 自動(dòng)化管理: Next.js 的 App Router 自動(dòng)處理布局嵌套邏輯,無需手動(dòng)傳遞布局內(nèi)容。
到此這篇關(guān)于Next.js路由布局機(jī)制詳解的文章就介紹到這了,更多相關(guān)Next.js路由布局內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Vue自定義指令實(shí)現(xiàn)按鈕級(jí)的權(quán)限控制的示例代碼
在Vue中可以通過自定義指令來實(shí)現(xiàn)按鈕權(quán)限控制,本文主要介紹了Vue自定義指令實(shí)現(xiàn)按鈕級(jí)的權(quán)限控制的示例代碼,具有一定的參考價(jià)值,感興趣的可以了解一下2024-05-05
解決vue3.0運(yùn)行項(xiàng)目warning Insert `·` prettier/pret
這篇文章主要介紹了解決vue3.0運(yùn)行項(xiàng)目warning Insert `·` prettier/prettier問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-10-10
Vue使用vux-ui自定義表單驗(yàn)證遇到的問題及解決方法
這篇文章主要介紹了Vue使用vux-ui自定義表單驗(yàn)證遇到的問題及解決方法,需要的朋友可以參考下2018-05-05
Vue2?Observer實(shí)例dep和閉包中dep區(qū)別詳解
這篇文章主要為大家介紹了Vue2?Observer實(shí)例dep和閉包中dep區(qū)別詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10
Vue3使用vue-office插件實(shí)現(xiàn)word預(yù)覽功能
vue-office是一個(gè)支持多種文件(docx、.xlsx、pdf)預(yù)覽的vue組件庫,支持vue2和vue3,這篇文章主要介紹了Vue3使用vue-office插件實(shí)現(xiàn)word預(yù)覽功能,需要的朋友可以參考下2024-04-04
Echarts+VUE柱狀圖繪制細(xì)節(jié)并且屏幕自適應(yīng)完整代碼
柱狀圖(或稱條形圖)是一種通過柱形的長度來表現(xiàn)數(shù)據(jù)大小的一種常用圖表類型,這篇文章主要給大家介紹了關(guān)于Echarts+VUE柱狀圖繪制細(xì)節(jié)并且屏幕自適應(yīng)的相關(guān)資料,需要的朋友可以參考下2024-02-02

