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

Next.js集成next-intl后无法调用getServerSideProps从Strapi加载数据

问题原因与解决方案

核心问题:你用的是Next.js App Router(目录结构为app/[locale]/about-us/page.jsx),而getServerSideProps、getStaticProps是Page Router(pages/目录体系)专属的数据获取函数,在App Router环境下完全不会被触发,这就是它们未执行的根本原因。

App Router 数据获取替代方案

App Router中的组件默认是服务器组件,可直接在组件内部编写异步代码获取数据,无需额外函数包裹。结合你的多语言场景,具体实现如下:

1. 服务器组件内直接异步获取数据

修改app/[locale]/about-us/page.jsx:

export default async function AboutUsPage({ params: { locale } }) {
  // 将locale传入Strapi接口,获取对应语言的内容
  const res = await fetch(`http://127.0.0.1:1337/api/regulation?locale=${locale}`);
  // 注意必须await解析响应的json数据
  const regulation = await res.json();

  return (
    <div>
      <h1>关于我们</h1>
      <p>{regulation.data.attributes.content}</p>
    </div>
  );
}

2. 生成静态路径(替代getStaticPaths)

若需要静态生成所有语言版本的页面(SSG),使用generateStaticParams函数生成所有支持的locale路径:

// 在page.jsx中添加该函数
export async function generateStaticParams() {
  // 替换为你实际支持的语言列表,也可从next-intl配置中读取
  const supportedLocales = ['zh', 'en'];
  return supportedLocales.map(locale => ({ locale }));
}

3. 控制渲染模式(SSR/SSG/增量再生)

  • 静态生成(SSG):默认fetch会缓存数据,页面构建时生成静态文件。
  • 服务端渲染(SSR):若需每次请求都获取最新数据,给fetch添加cache: 'no-store'配置:
    const res = await fetch(`http://127.0.0.1:1337/api/regulation?locale=${locale}`, { cache: 'no-store' });
    
  • 增量静态再生(ISR):设置revalidate字段,定期重新生成页面:
    // 在page.jsx顶部添加
    export const revalidate = 60; // 每60秒重新生成一次页面
    

结合next-intl的注意事项

由于你的路由是[locale]动态路由,组件的params参数会自动包含当前的locale值,直接用它请求Strapi对应语言的内容即可,无需额外处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 11:37:35