问题
您创建了一些博客页面,并一直在开发它们,以确保它们能很好地静态呈现。后来,您发现这些页面不再静态呈现,而是在每次请求时都重新呈现。
原因
我在应用程序顶部的 Provider 中使用了 Next.js 提供的cookie
函数。
import { cookies } from 'next/headers';
函数 Proivder {
const cookie = cookies().....
}
Next.js 默认采用静态呈现。不过,如果请求在呈现过程中未缓存,或者使用了.dynamic 函数,则会切换到动态呈现。
Dynamic Functions | Data | Route |
---|---|---|
No | Cached | Statically Rendered |
Yes | Cached | Dynamically Rendered |
No | Not Cached | Dynamically Rendered |
Yes | Not Cached | Dynamically Rendered |
由于Cookie
是动态函数之一,而且我们在制作者中使用了它,因此它下面的所有页面和组件也将依赖这些动态数据。 因此,以前作为静态页面正常运行的页面已转换为动态页面。
解决方法
在页面顶部粘贴以下代码即可解决问题
export const dynamic = 'force-static';
不过,你应该知道,插入这段代码会导致以下问题
- 无法访问动态数据:此设置会导致无法访问请求点数据,如标题、cookie 等。调用这些函数将返回默认值或空数据。