当前位置: 首页 > ai >正文

next 声明路由

先决条件

/src/app/layout.tsx 文件中需要包含以下内容

export default function RootLayout({children,
}: {children: React.ReactNode
}) {return (<html><body>{children}</body></html>)
}

普通路由

例子 /about 页面
/src/about/page.tsx

'use client'
import Link from 'next/link'
export default function AboutPage() {return (<div><h1>About Page</h1><Link href="/">← 返回首页</Link></div>)
}

动态路由

博客例子 需要新建
/app/blog/ 目录
/app/blog/page.tsx 文件

'use client'
import Link from 'next/link'export default function BlogList() {// 这里可以动态获取博客列表数据const posts = [{ id: 1, title: 'First Post', slug: 'first-post' },{ id: 2, title: 'Second Post', slug: 'second-post' }]return (<div><h1>Blog List</h1><ul>{posts.map((post) => (<li key={post.id}><Link href={`/blog/${post.slug}`}>{post.title}</Link></li>))}</ul></div>)
}

/app/blog/[slug] 目录
/app/blog/[slug]/page.tsx 文件
注意: 同名的query 参数会被覆盖
例如 url /blog/abc?slug=123
最后的 slug = ‘abc’ 而不是123

'use client'
import { useParams } from 'next/navigation'
import Link from 'next/link'export default function BlogPost() {const params = useParams()const slug = params.slug as stringreturn (<div><h1>Blog Post: {slug}</h1><Link href="/blog">← 返回博客列表</Link></div>)
}

嵌套路由

访问/a/b
新建
/app/a 目录
/app/a/b 目录
/app/a/b/page.tsx 文件

export default function BB() {return (<div>B页面</div>);
}

如果你希望能访问/a 那么需要新建一个
/a/page.tsx 文件

export default function AA() {return (<div>A页面</div>);
}

全局公共组件

例如导航栏页脚等
在目录/src/components 中存放全局的公共组件
页脚为例
/src/components/Footer
/src/components/Footer/Footer.tsx

// src/components/Footer/Footer.tsx
'use client'
import styles from './Footer.module.css'export default function Footer() {return (<footer className={styles.footer}><div className={styles.container}><p>&copy; 2024 MySite. All rights reserved.</p><div className={styles.socialLinks}><a href="#">Twitter</a><a href="#">GitHub</a></div></div></footer>)
}

/src/components/Footer/Footer.module.css

/* src/components/Footer/Footer.module.css */
.footer {background-color: #f8f9fa;padding: 2rem 0;border-top: 1px solid #eaeaea;}.container {max-width: 1200px;margin: 0 auto;text-align: center;padding: 1rem;}.socialLinks {margin-top: 1rem;}.socialLinks a {margin: 0 1rem;color: #666;text-decoration: none;}

局部公共组件建议放在

/src/app/views/someComponent/components/somePublicComponent

http://www.xdnf.cn/news/8478.html

相关文章:

  • 告别手动测试:AUTOSAR网络管理自动化测试实战
  • 【三维重建】【3DGS系列】【深度学习】3DGS的理论基础知识之如何控制高斯椭球
  • 【普及+/提高】洛谷P2613 ——【模板】有理数取余
  • 二维空间几何图形​​处理库.GEOS几何库.
  • ZeroNews内网穿透:实现OpenWrt远程访问与管理(2025最新方案)
  • 因为产品和思想的流行都是循序渐进的,需要一个影响的过程
  • 应用案例 | 柔性生产新范式,优傲UR20赋能葡萄酒灌装产线
  • 文学与社会学是否只是在做解释的工作?
  • 软件性能测试常用指标有哪些,做性能测试的第三方软件测评机构推荐
  • CAU人工智能class4 批次归一化
  • 投资策略规划最优决策分析
  • 什么是 API 管理?为什么管理 API 很重要?如何用 iPaaS 平台管理 API
  • Linux-线程同步于互斥
  • 《短线操盘跟庄关键技术》速读笔记
  • VLA视觉语言动作大模型的简单介绍
  • 2025年5月软考系分论文预测
  • C++11新特性(2)
  • 数据共享交换平台之API服务开发、挂载、申请审核
  • 【机械视觉】Halcon—【一、Halcon的介绍和基础语法】
  • CAMEL的特色功能——数据合成
  • 淘宝扭蛋机小程序开发:打造趣味电商新玩法,激活年轻消费力
  • 数据库设计文档撰写攻略
  • Baklib知识中台赋能智能管理实践
  • Idea 配合 devtools 依赖 实现热部署
  • GitHub 上关于 HDF5 使用教程的资源
  • Oracle 的 ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH 命令
  • 2025 GEO优化战略图鉴:解码上海源易技术核心体系
  • 【Java高阶面经:消息队列篇】25、Kafka消息积压应对:从应急处理到架构根治
  • 湿疹治疗进入 “自护力时代”:泽德曼医药泽立美引领 “修复型治疗” 新趋势
  • 3D个人简历网站 7.联系我