You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NextJS页面未用getStaticProps/getServerSideProps仍SSR?是否为设计行为?

问题解答:未使用getStaticProps/getServerSideProps的Next.js页面仍执行服务端渲染是否符合设计行为?

没错,这完全是Next.js(Pages Router)的设计预期行为,你可能是把「数据预获取的专用方法」和「页面默认渲染模式」搞混了,我来给你梳理清楚:


关键:Pages Router页面默认就是SSR

在你用的这种Next.js Pages Router写法里,所有页面默认都是服务端渲染(SSR),除非你主动做以下调整:

  • 用next export命令生成纯静态站点
  • 给页面加上getStaticProps,把它改成静态生成(SSG)页面
  • 升级到Next.js 13+的App Router(默认是静态渲染,需要手动配置动态渲染)

而getStaticProps/getServerSideProps不是开启SSR的必要条件,它们是Next.js提供的数据预获取工具:

  • getStaticProps:在项目构建时就获取数据,生成静态HTML文件
  • getServerSideProps:每次有用户请求时,服务器先拉取最新数据再渲染页面

你的代码为啥会SSR?

你代码里用了Apollo Client的useQuery来拉取汇率数据,在Next.js的默认SSR流程中:

  1. 用户请求页面时,服务器先渲染你的Home组件
  2. 组件里的useQuery会在服务器端发起GraphQL请求,拿到数据
  3. 服务器把渲染好的、包含数据的完整HTML返回给用户
  4. 用户浏览器拿到HTML后,完成「水合」过程,让页面变成可交互的

整个流程都是Next.js默认SSR的正常操作——不需要额外加getServerSideProps,服务器依然会帮你完成数据获取和组件渲染的工作,再返回完整页面。

关于官方文档的误解

官方文档里提到getStaticProps/getServerSideProps,核心是在讲如何在页面渲染之前提前获取数据,而不是说「必须用这些函数才能实现SSR」。如果你的组件在渲染过程中自己获取数据(比如你的Apollo查询),Next.js的SSR机制依然会在服务器端走完这个流程,这是框架的默认行为。


内容的提问来源于stack exchange,提问作者Evanss

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 21:47:56