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流程中:
- 用户请求页面时,服务器先渲染你的
Home组件 - 组件里的
useQuery会在服务器端发起GraphQL请求,拿到数据 - 服务器把渲染好的、包含数据的完整HTML返回给用户
- 用户浏览器拿到HTML后,完成「水合」过程,让页面变成可交互的
整个流程都是Next.js默认SSR的正常操作——不需要额外加getServerSideProps,服务器依然会帮你完成数据获取和组件渲染的工作,再返回完整页面。
关于官方文档的误解
官方文档里提到getStaticProps/getServerSideProps,核心是在讲如何在页面渲染之前提前获取数据,而不是说「必须用这些函数才能实现SSR」。如果你的组件在渲染过程中自己获取数据(比如你的Apollo查询),Next.js的SSR机制依然会在服务器端走完这个流程,这是框架的默认行为。
内容的提问来源于stack exchange,提问作者Evanss
相关产品推荐
相关产品推荐

