App Router 与 `/app` 目录结构 & 布局系统的奇妙冒险 🏰

引子 ✨

在 React 与 Next.js 的江湖里,/app 目录就像一座新兴的城市。

它不再是老旧的 /pages 村,而是一座拥有地铁、环线和分区的现代都市。

layout.tsx 呢?它是这座城市的"城市规划师",负责决定每个区域的公共设施:路灯要不要亮,垃圾桶放哪儿,甚至决定所有页面是不是都要有同一条导航栏。

今天我们就来一次"城市规划科学之旅",从底层原理聊到写代码的手感,再加点幽默调料。👷‍♂️


/app 目录:模块化的大都会 🏙️

在 Next.js 13+ 的 App Router 模式下,/app 目录取代了 /pages,带来了更强的模块化和布局控制。

目录结构长啥样?

bash 复制代码
/app
  ├── layout.tsx
  ├── page.tsx
  ├── dashboard
  │    ├── layout.tsx
  │    └── page.tsx
  └── settings
       └── page.tsx
  • page.tsx:页面入口,就像一栋大楼的门口。🚪
  • layout.tsx:布局文件,决定这栋楼的公共走廊、楼梯间。🛗
  • 子目录(如 dashboardsettings):独立社区,可以有自己的小区布局。🏘️

layout.tsx:公共设施的灵魂架构师 🏗️

/app 体系里,layout.tsx 的存在很像操作系统里的 内核

它不会直接办事(不画 UI 元素),但它规定了 所有页面必须遵守的公共约定

一个例子:

javascript 复制代码
// app/layout.tsx
export default function RootLayout({ children }) {
  return (
    <html lang="en">
      <body>
        <header>🌐 我是全站导航栏</header>
        <main>{children}</main>
        <footer>© 2025 --- 由 AI 友情提示:早点休息 🛌</footer>
      </body>
    </html>
  );
}

这里的 children 就像 Linux 里的进程调度:

  • 系统提供一个统一的"舞台"
  • 各个子页面在舞台上各显神通

层层嵌套:像套娃一样的布局 🪆

布局是可以嵌套的。

比如你网站有一个 /dashboard 区域,这里需要一个侧边栏。

你就可以在 /app/dashboard/layout.tsx 再放一个布局文件。

javascript 复制代码
// app/dashboard/layout.tsx
export default function DashboardLayout({ children }) {
  return (
    <section>
      <aside>📊 左边的侧边栏</aside>
      <div>{children}</div>
    </section>
  );
}

于是:

  1. 全局 layout.tsx 提供导航栏和页脚。
  2. dashboard/layout.tsx 再加一个侧边栏。
  3. /dashboard/page.tsx 显示具体数据。

最终渲染出来的页面,就像一层层套娃,既有全局的公共部分,又有局部的专属区域。


设计哲学:为什么要有布局系统?🤔

这其实与计算机体系结构的思想暗合。

  • CPU 上有全局寄存器(对应全局布局)。
  • 各进程也有私有寄存器(对应局部布局)。
  • 公共部分减少重复,局部部分灵活扩展。

如果没有布局系统,你可能会在每个页面里写十遍 <header>

这就像在每个函数里都自己实现 malloc ------ 既冗余又危险。💣


小结 🎯

  • /app 目录是新一代"城市",模块化、现代化。
  • layout.tsx 是公共设施规划师,决定整个页面的基调。
  • 布局可以像套娃一样嵌套,既有全局一致性,又能局部灵活。
  • 本质上,这是 软件工程里抽象与复用思想 的一次 UI 实践。

最后来点文学收尾 🌿

如果说 /app 目录是城市的街区,layout.tsx 就是那条永远亮着的街灯。

它不喧嚣,却默默守护着每一个来往的行人。

当你在 /dashboard 的深夜调试数据时,

它依旧会在顶端挂着那行"🌐 我是全站导航栏",提醒你:
不管走到哪里,你都还在这个城市的怀抱里。


✍️ 好啦,今天的"App Router 城市探险"就到此结束。

下次我们再聊聊 Server Components,那就像城市里的地下地铁 ------ 看不见,却带来巨大效率提升。

相关推荐
崔庆才丨静觅1 小时前
hCaptcha 验证码图像识别 API 对接教程
前端
passerby60612 小时前
完成前端时间处理的另一块版图
前端·github·web components
掘了2 小时前
「2025 年终总结」在所有失去的人中,我最怀念我自己
前端·后端·年终总结
崔庆才丨静觅2 小时前
实用免费的 Short URL 短链接 API 对接说明
前端
崔庆才丨静觅2 小时前
5分钟快速搭建 AI 平台并用它赚钱!
前端
崔庆才丨静觅3 小时前
比官方便宜一半以上!Midjourney API 申请及使用
前端
Moment3 小时前
富文本编辑器在 AI 时代为什么这么受欢迎
前端·javascript·后端
崔庆才丨静觅3 小时前
刷屏全网的“nano-banana”API接入指南!0.1元/张量产高清创意图,开发者必藏
前端
剪刀石头布啊3 小时前
jwt介绍
前端
爱敲代码的小鱼3 小时前
AJAX(异步交互的技术来实现从服务端中获取数据):
前端·javascript·ajax