静态渲染的问题

🌐

本帖由 DeepL 翻译。如有任何翻译错误,请告知我们!

问题

您创建了一些博客页面,并一直在开发它们,以确保它们能很好地静态呈现。后来,您发现这些页面不再静态呈现,而是在每次请求时都重新呈现。

原因

我在应用程序顶部的 Provider 中使用了 Next.js 提供的cookie函数。

import { cookies } from 'next/headers';

函数 Proivder {
  const cookie = cookies().....
}

Next.js 默认采用静态呈现。不过,如果请求在呈现过程中未缓存,或者使用了.dynamic 函数,则会切换到动态呈现。

Dynamic FunctionsDataRoute
NoCachedStatically Rendered
YesCachedDynamically Rendered
NoNot CachedDynamically Rendered
YesNot CachedDynamically Rendered

由于Cookie是动态函数之一,而且我们在制作者中使用了它,因此它下面的所有页面和组件也将依赖这些动态数据。 因此,以前作为静态页面正常运行的页面已转换为动态页面。

解决方法

在页面顶部粘贴以下代码即可解决问题

export const dynamic = 'force-static'

不过,你应该知道,插入这段代码会导致以下问题

  • 无法访问动态数据:此设置会导致无法访问请求点数据,如标题、cookie 等。调用这些函数将返回默认值或空数据。