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

next-i18next使用getStaticProps时页面加载后_app.js重复渲染原因咨询

next-i18next场景下getStaticProps触发_app.js重新调用的原因
  • Next.js原生props传递机制:Next.js框架设计中,所有页面的getStaticProps返回值都会作为pageProps属性整体传递给顶层_app.js组件。只要getStaticProps执行完毕返回新的对象(哪怕内容和之前完全相同,只是引用地址变化),pageProps的引用就会更新,进而触发_app.js的重渲染,该逻辑和是否使用next-i18next无关,next-i18next的注入行为只是让这个现象更容易被观测到。
  • next-i18next的属性注入逻辑:next-i18next提供的serverSideTranslations方法会在getStaticProps执行阶段拉取对应语言的翻译资源,向返回的props中注入_nextI18Next配置、当前locale、翻译字典等专属属性。每次getStaticProps运行时serverSideTranslations都会生成新的对象引用,进一步保证了pageProps的引用变更,必然触发_app.js重新调用。
  • 全局上下文更新触发重渲染:next-i18next会在_app.js层面挂载I18n全局上下文Provider,当getStaticProps返回的翻译内容、语言配置发生实际变化时,全局上下文会更新,进而触发整个App组件树的重新渲染。
  • 增量静态再生的额外触发:如果页面配置了增量静态再生(ISR,即getStaticProps中配置了revalidate参数),每次ISR触发页面重新生成时,getStaticProps都会重新运行拉取最新翻译数据,新的props传递到_app.js时也会触发重新调用。

如果需要减少不必要的重渲染,可以通过React.memo包裹_app.js的导出组件,自定义比较逻辑过滤无意义的props引用变更,仅在必要的全局属性(如用户状态、全局配置)变化时才触发重渲染。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 15:24:04