page.js
page
文件允许你为路由定义唯一的 UI。你可以通过默认导出一个组件来创建页面:
须知
page
可以使用.js
、.jsx
或.tsx
文件扩展名。page
始终是路由子树的叶子节点。- 必须要有
page
文件才能使路由段公开可访问。 - 页面默认是服务端组件 (Server Components),但可以设置为客户端组件 (Client Component)。
参考
Props
params
(可选)
一个解析为包含从根段到该页面的动态路由参数对象的 Promise。
示例路由 | URL | params |
---|---|---|
app/shop/[slug]/page.js | /shop/1 | Promise<{ slug: '1' }> |
app/shop/[category]/[item]/page.js | /shop/1/2 | Promise<{ category: '1', item: '2' }> |
app/shop/[...slug]/page.js | /shop/1/2 | Promise<{ slug: ['1', '2'] }> |
- 由于
params
prop 是一个 Promise,你必须使用async/await
或 React 的use
函数来访问其值。- 在版本 14 及更早版本中,
params
是一个同步 prop。为了向后兼容,在 Next.js 15 中你仍然可以同步访问它,但这一行为将在未来被弃用。
- 在版本 14 及更早版本中,
searchParams
(可选)
一个解析为包含当前 URL 查询参数对象的 Promise。例如:
示例 URL | searchParams |
---|---|
/shop?a=1 | Promise<{ a: '1' }> |
/shop?a=1&b=2 | Promise<{ a: '1', b: '2' }> |
/shop?a=1&a=2 | Promise<{ a: ['1', '2'] }> |
- 由于
searchParams
prop 是一个 Promise,你必须使用async/await
或 React 的use
函数来访问其值。- 在版本 14 及更早版本中,
searchParams
是一个同步 prop。为了向后兼容,在 Next.js 15 中你仍然可以同步访问它,但这一行为将在未来被弃用。
- 在版本 14 及更早版本中,
searchParams
是一个**动态 API,其值无法提前预知。使用它会将页面在请求时转为动态渲染 (dynamic rendering)**。searchParams
是一个普通的 JavaScript 对象,不是URLSearchParams
实例。
示例
基于 params
显示内容
使用动态路由段,你可以根据 params
prop 显示或获取页面的特定内容。
使用 searchParams
处理筛选
你可以使用 searchParams
prop 根据 URL 的查询字符串处理筛选、分页或排序。
在客户端组件中读取 searchParams
和 params
要在客户端组件(不能是 async
)中使用 searchParams
和 params
,你可以使用 React 的 use
函数来读取 Promise:
版本历史
版本 | 变更 |
---|---|
v15.0.0-RC | params 和 searchParams 现在为 Promise。提供了代码迁移工具。 |
v13.0.0 | 引入 page 。 |