我正在使用路由来获取页面ex。page/[id].js
并仅显示该ID的数据。那么每次我访问这个页面时,它会重新获取数据吗?通过此页上的链接进入下一页,然后按“返回”键返回此页。就像在React.js中使用DidComponentMount
获取数据一样,它每次挂载时都会获取数据,即使你已经访问了页面。
export async function getStaticProps(context) {
const res = await fetch(`https://.../data/${context.params.id}`)
const data = await res.json()
return {
props: { data }
}
}
1条答案
按热度按时间brc7rcf01#
页面内部的
getStaticProps
(而不是组件内部)告诉next.js当前页面将静态生成。在getStaticProps
中执行的代码不会包含在发送回客户端的代码包中。getStatisProps
的想法是在构建时预先生成页面。这意味着所有的HTML
代码和数据都是预先准备好的。由于页面是预构建的,当我们部署它们时,它们可以被服务器缓存,因此可以立即处理传入的请求。因此,当页面被提供时,它们不是空的,它们预先填充了内容。如果运行
npm run build
,请访问.next/server/
目录,您将看到预生成的HTML文件。如果数据经常更改会发生什么情况。如果你构建的是完全静态的东西,那么预生成的页面是非常好的。如果要呈现数据不变的博客文章,最好预先生成页面。
每次向静态生成的页面添加新数据时,为了查看更改,必须重新构建项目。但是next.js通过
incremental static generation
解决了这个问题。有了这个,你的页面不断更新,而无需重新部署你的应用程序。你只需要告诉next.js你希望你的页面在每次请求后最多x秒内预生成。重新生成的页面将替换旧页面。因此,您可以对传入请求进行持续的预生成。为此,只需添加revalidate
属性:如果不添加
revalidate
属性,则将从该高速缓存提供预构建HTML页面