路由片段配置
路由片段选项允许您通过直接导出以下变量来配置 页面、布局 或 路由处理程序 的行为。
选项 | 类型 | 默认值 |
---|---|---|
experimental_ppr | 布尔值 | |
dynamic | 'auto' | 'force-dynamic' | 'error' | 'force-static' | 'auto' |
dynamicParams | 布尔值 | true |
revalidate | false | 0 | 数字 | false |
fetchCache | 'auto' | 'default-cache' | 'only-cache' | 'force-cache' | 'force-no-store' | 'default-no-store' | 'only-no-store' | 'auto' |
runtime | 'nodejs' | 'edge' | 'nodejs' |
preferredRegion | 'auto' | 'global' | 'home' | 字符串 | 字符串数组 | 'auto' |
maxDuration | 数字 | 由部署平台设置 |
选项
experimental_ppr
为布局或页面启用 部分预渲染 (PPR)。
export const experimental_ppr = true
// true | false
dynamic
将布局或页面的动态行为更改为完全静态或完全动态。
export const dynamic = 'auto'
// 'auto' | 'force-dynamic' | 'error' | 'force-static'
值得注意的是:
app
目录中的新模型偏向于在fetch
请求级别进行细粒度的缓存控制,而不是在pages
目录中页面级别的getServerSideProps
和getStaticProps
的二进制全有或全无模型。dynamic
选项是一种作为便利措施选择加入先前模型的方式,并提供更简单的迁移路径。
-
'auto'
(默认):默认选项,尽可能多地缓存,同时不阻止任何组件选择动态行为。 -
'force-dynamic'
:强制 动态渲染,这将导致在请求时为每个用户渲染路由。此选项等效于pages
目录中的getServerSideProps()
。- 将布局或页面中每个
fetch()
请求的选项设置为{ cache: 'no-store', next: { revalidate: 0 } }
。 - 将片段配置设置为
export const fetchCache = 'force-no-store'
-
'error'
:强制静态渲染并缓存布局或页面的数据,如果任何组件使用 动态 API 或未缓存的数据,则会导致错误。此选项等效于pages
目录中的getStaticProps()
。- 将布局或页面中每个
fetch()
请求的选项设置为{ cache: 'force-cache' }
。 - 将片段配置设置为
fetchCache = 'only-cache', dynamicParams = false
。 dynamic = 'error'
将dynamicParams
的默认值从true
更改为false
。您可以通过手动设置dynamicParams = true
来选择重新加入为generateStaticParams
未生成的动态参数动态渲染页面。
-
'force-static'
:强制静态渲染并缓存布局或页面的数据,方法是强制cookies
、headers()
和useSearchParams()
返回空值。
值得注意的是:
- 有关如何从
getServerSideProps
和getStaticProps
迁移到dynamic: 'force-dynamic'
和dynamic: 'error'
的说明,请参阅升级指南。
dynamicParams
控制访问未通过generateStaticParams生成的动态片段时发生的情况。
export const dynamicParams = true // true | false,
true
(默认):未包含在generateStaticParams
中的动态片段将按需生成。false
:未包含在generateStaticParams
中的动态片段将返回404错误。
值得注意的是:
- 此选项替换了
pages
目录中getStaticPaths
的fallback: true | false | blocking
选项。- 要首次访问所有路径时静态渲染,您需要在
generateStaticParams
中返回一个空数组,或使用export const dynamic = 'force-static'
。- 当
dynamicParams = true
时,该片段使用流式服务器渲染。- 如果使用了
dynamic = 'error'
和dynamic = 'force-static'
,它将把dynamicParams
的默认值更改为false
。
revalidate
设置布局或页面的默认重新验证时间。此选项不会覆盖由单个fetch
请求设置的revalidate
值。
export const revalidate = false
// false | 0 | number
false
(默认):缓存任何将cache
选项设置为'force-cache'
或在使用动态API之前发现的fetch
请求的默认启发式方法。在语义上等效于revalidate: Infinity
,这意味着资源应无限期缓存。单个fetch
请求仍然可以使用cache: 'no-store'
或revalidate: 0
来避免被缓存并使路由动态渲染。或者将revalidate
设置为小于路由默认值的正数,以提高路由的重新验证频率。0
:即使没有发现动态API或未缓存的数据获取,也确保始终动态渲染布局或页面。此选项更改了未设置cache
选项的fetch
请求的默认值,但保留了选择加入'force-cache'
或使用正revalidate
的fetch
请求。number
:(以秒为单位)将布局或页面的默认重新验证频率设置为n
秒。
值得注意的是:
- 重新验证值需要是静态可分析的。例如
revalidate = 600
是有效的,但revalidate = 60 * 10
无效。- 使用
runtime = 'edge'
时,重新验证值不可用。- 在开发环境中,页面始终按需渲染,并且从未缓存。这使您可以立即查看更改,而无需等待重新验证周期过去。
重新验证频率
- 单个路由的每个布局和页面的最低
revalidate
将决定整个路由的重新验证频率。这确保子页面与其父布局一样频繁地重新验证。 - 单个
fetch
请求可以设置低于路由的默认revalidate
的值,以提高整个路由的重新验证频率。这允许您根据某些条件动态选择加入更频繁的某些路由的重新验证。
fetchCache
这是一个高级选项,仅在您确实需要覆盖默认行为时才应使用。
默认情况下,Next.js将缓存任何在使用任何动态API之前可访问的fetch()
请求,并且不会缓存在使用动态API之后发现的fetch
请求。
fetchCache
允许您覆盖布局或页面中所有fetch
请求的默认cache
选项。
export const fetchCache = 'auto'
// 'auto' | 'default-cache' | 'only-cache'
// 'force-cache' | 'force-no-store' | 'default-no-store' | 'only-no-store'
'auto'
(默认):使用它们提供的cache
选项缓存动态API之前的fetch
请求,并且不缓存动态API之后的fetch
请求的默认选项。'default-cache'
:允许将任何cache
选项传递给fetch
,但如果未提供选项,则将cache
选项设置为'force-cache'
。这意味着即使动态API之后的fetch
请求也被视为静态的。'only-cache'
:通过将默认值更改为cache: 'force-cache'
(如果未提供选项)并导致任何fetch
请求使用cache: 'no-store'
时发生错误,确保所有fetch
请求都选择加入缓存。'force-cache'
:通过将所有fetch
请求的cache
选项设置为'force-cache'
,确保所有fetch
请求都选择加入缓存。'default-no-store'
:允许将任何cache
选项传递给fetch
,但如果未提供选项,则将cache
选项设置为'no-store'
。这意味着即使动态API之前的fetch
请求也被视为动态的。'only-no-store'
:通过将默认值更改为cache: 'no-store'
(如果未提供选项)并导致任何fetch
请求使用cache: 'force-cache'
时发生错误,确保所有fetch
请求都选择退出缓存。'force-no-store'
:通过将所有fetch
请求的cache
选项设置为'no-store'
,确保所有fetch
请求都选择退出缓存。这强制所有fetch
请求在每次请求时都重新获取,即使它们提供了'force-cache'
选项。
跨路由片段行为
- 单个路由的每个布局和页面中设置的任何选项都需要彼此兼容。
- 如果同时提供了
'only-cache'
和'force-cache'
,则'force-cache'
优先。如果同时提供了'only-no-store'
和'force-no-store'
,则'force-no-store'
优先。force选项更改整个路由的行为,因此具有'force-*'
的单个片段将防止由'only-*'
引起的任何错误。 'only-*'
和'force-*'
选项的目的是保证整个路由是完全静态的或完全动态的。这意味着- 单个路由中不允许将
'only-cache'
和'only-no-store'
组合使用。 - 单个路由中不允许将
'force-cache'
和'force-no-store'
组合使用。
- 单个路由中不允许将
- 如果子级提供了
'auto'
或'*-cache'
,则父级不能提供'default-no-store'
,因为这可能导致相同的获取具有不同的行为。
- 如果同时提供了
- 通常建议将共享的父布局保留为
'auto'
,并在子片段发生分歧的地方自定义选项。
runtime
我们建议使用Node.js运行时来渲染您的应用程序,并使用Edge运行时来使用中间件(唯一支持的选项)。
export const runtime = 'nodejs'
// 'nodejs' | 'edge'
'nodejs'
(默认)'edge'
了解有关不同运行时的更多信息。
preferredRegion
export const preferredRegion = 'auto'
// 'auto' | 'global' | 'home' | ['iad1', 'sfo1']
对preferredRegion
的支持以及支持的区域取决于您的部署平台。
值得注意的是:
- 如果未指定
preferredRegion
,它将继承最近的父布局的选项。- 根布局默认为
all
区域。
maxDuration
默认情况下,Next.js不会限制服务器端逻辑(渲染页面或处理API)的执行。部署平台可以使用Next.js构建输出中的maxDuration
来添加特定的执行限制。例如,在Vercel上。
注意:此设置需要Next.js 13.4.10
或更高版本。
export const maxDuration = 5
值得注意的是:
- 如果使用服务器操作,请在页面级别设置
maxDuration
以更改页面上使用的所有服务器操作的默认超时。
generateStaticParams
generateStaticParams
函数可以与动态路由片段结合使用,以定义将在构建时静态生成而不是在请求时按需生成的路由片段参数列表。
有关更多详细信息,请参阅API 参考。
版本历史
版本 | |
---|---|
v15.0.0-RC | export const runtime = "experimental-edge" 已弃用。提供了一个代码修改工具。 |
这有帮助吗?