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

如何解决pages/_app导致的自动静态优化禁用警告?

解决Next.js自动静态优化退出警告问题

问题说明

警告:由于pages/_app中存在getInitialProps,您已退出自动静态优化(Automatic Static Optimization)。这不会禁用使用getStaticProps的页面

我的_app.tsx代码如下:

import Layout from "../components/Layout";
import "../styles/globals.scss";
import type { AppProps } from "next/app";

const MyApp: React.FC<AppProps> = ({ Component, pageProps }) => {
  return (
    <Layout>
      <Component {...pageProps} />
    </Layout>
  );
};

export default MyApp;

经排查,Layout组件内的Footer使用了next-translate/useTranslation做国际化翻译,这应该是触发警告的原因:

function Contacts() {
  const { t } = useTranslation("translations");

  return (
    <footer className={styles.contacts}>
      <div className={styles.contacts__main}>
        <h1 className={styles.contacts__header}>{t("contacts")}</h1>
        ....

解决方案

方法1:用next-translate的appWithI18n包装App组件

next-translate针对App组件层级有专门的兼容处理,用appWithI18n包裹MyApp组件,可避免隐式注入getInitialProps:

import Layout from "../components/Layout";
import "../styles/globals.scss";
import type { AppProps } from "next/app";
import { appWithI18n } from "next-translate";

const MyApp: React.FC<AppProps> = ({ Component, pageProps }) => {
  return (
    <Layout>
      <Component {...pageProps} />
    </Layout>
  );
};

export default appWithI18n(MyApp);

方法2:调整Footer的翻译实现逻辑

避免在布局组件中直接使用客户端钩子触发服务端渲染逻辑,可改为在页面层级通过getStaticProps预取翻译内容,或者使用next-translate的Trans组件替代useTranslation(若业务场景允许)。

方法3:给App组件显式添加空的getStaticProps(临时方案,不推荐)

通过给App组件添加空的getStaticProps覆盖隐式的getInitialProps,但可能影响next-translate的正常工作,仅作临时应急:

MyApp.getStaticProps = async () => {
  return { props: {} };
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 15:48:04