HomeBlogAboutLogin
返回列表

Next.js路由

目录结构分析

一、app 下的文件夹就是路由吗?

规则是:

app/
  blog/
    page.tsx

会生成:

/blog

但有一个特殊规则:

带括号的文件夹:(xxx)

叫:

Route Group(路由分组)

特点是:

不会出现在 URL 中
只用于组织结构 / layout

二、解释你这个结构(逐个对应 URL)

你的目录是:

app
 ├─ (auth)
 │   └─ login
 │       └─ page.tsx

 └─ (main)
     ├─ blog
     │   └─ [page]
     │       └─ page.tsx

     ├─ posts
     │   └─ [slug]
     │       └─ page.tsx

     └─ tags
         └─ [tag]
             └─ page.tsx

真实访问 URL 是:

/login
/blog/1
/posts/react-hooks
/tags/react

注意:

(auth)  不会出现在 URL
(main)  不会出现在 URL

三、那你当时为什么要设计 (auth)(main)

99% 的原因是:

为了用不同的 layout

这是 Next.js App Router 的一个核心设计。


举例:登录页不要导航栏

登录页

通常是:

没有 header
没有 sidebar
没有 footer

而博客页面需要:

header
footer
背景动画
导航

所以你当时大概率写了:

app
 ├─ (auth)
 │   └─ layout.tsx

 └─ (main)
     └─ layout.tsx

四、这就是 Route Group 的典型用途

(auth)   → 登录相关页面 layout
(main)   → 正常网站 layout

五、我帮你画出你这个结构的真实逻辑

app

├─ (auth)
│   ├─ layout.tsx        登录页布局(无导航)
│   └─ login
│       └─ page.tsx      /login

└─ (main)
    ├─ layout.tsx        主站布局(header/footer)

    ├─ blog
    │   └─ [page]
    │       └─ page.tsx  /blog/1

    ├─ posts
    │   └─ [slug]
    │       └─ page.tsx  /posts/react-hooks

    └─ tags
        └─ [tag]
            └─ page.tsx  /tags/react

六、再解释几个你目录里的关键点


[slug] 是动态路由

posts/[slug]/page.tsx

表示:

/posts/react-hooks
/posts/nextjs-guide
/posts/vue-tips

在代码里拿:

params.slug;

例如:

export default function Page({ params }: { params: { slug: string } }) {
  console.log(params.slug);
}

[page] 是分页

blog/[page]/page.tsx

表示:

/blog/1
/blog/2
/blog/3

[tag] 是标签页

tags/[tag]/page.tsx

表示:

/tags/react
/tags/javascript
/tags/css

七、你这个结构其实是一个“标准博客结构”

非常合理,没有问题。


八、再解释一个你目录里的重要文件

layout.tsx

这是:

页面框架

例如:

export default function Layout({ children }) {
  return (
    <>
      <Header />
      {children}
      <Footer />
    </>
  );
}

九、Next.js App Router 的 4 个核心文件(必须记住)

文件 作用
page.tsx 页面
layout.tsx 布局
loading.tsx 加载状态
error.tsx 错误页面

十、你这个博客的 URL 映射总结

目录 URL
(auth)/login /login
(main)/blog/[page] /blog/1
(main)/posts/[slug] /posts/react-hooks
(main)/tags/[tag] /tags/react

十一、如果你现在重新开始,我建议保持这个结构(是对的)

app
 ├─ (auth)
 │   └─ login

 └─ (main)
     ├─ blog
     ├─ posts
     ├─ tags

这是:

推荐结构

十二、如果你以后要加评论系统,我建议放这里

src
 └─ components
     └─ Comment
         ├─ CommentList.tsx
         └─ CommentForm.tsx

然后在:

posts/[slug]/page.tsx

里:

<CommentList slug={params.slug} />
<CommentForm slug={params.slug} />

最后一句总结(最重要)

app 下的文件夹 = 路由
但 (xxx) 是路由分组,不会出现在 URL 中

© 2026 转载请注明出处