Next.js 从 v13 版本开始加入了 App Router 模式,和原来的 Pages Router 不一样,新的 App Router 将所有路由规则都放在 /src/app 目录下,每一个页面对应一个 page.jsx 文件,这个文件需要 export 一个 default 的 React 组件,同时还支持 page.js, page.ts, page.tsx 这几个文件名,page 文件所在的目录则对应了它的路由规则。
路由规则
路由规则可以参考下表:
| type | router | matches | params |
|---|---|---|---|
| static | /page.jsx | / | { } |
| /foo/page.jsx | /foo | { } | |
| /foo/bar/page.jsx | /foo/bar | { } | |
| dynamic | /pages/[slug]/page.jsx | /pages/foo | {slug:'foo'} |
/pages/[slug]/[sub_slug]/page.jsx | /pages/foo/bar | {slug:'foo',sub_slug:'bar'} | |
| catch-all | /pages/[...path]/page.jsx | /pages/foo | {path:['foo']} |
| /pages/foo/bar | {path:['foo','bar']} | ||
| optional | /pages/[[...path]]/page.jsx | /pages | { } |
| /pages/foo | {path:['foo']} | ||
| /pages/foo/bar | {path:['foo','bar']} |
如何获取 params
// page.jsx
export default function Page({ params }) {
const { slug } = params;
...
}
// page.tsx
export default function Page({ params }: { params: { slug: string } }) {
const { slug } = params;
...
}