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

页面加载时getStaticProps未调用问题求助

问题原因与解决方案

核心问题:路由体系不兼容

getStaticProps 是 Next.js 专属的数据获取函数,仅在 Next.js 的文件系统路由(比如 pages/[id].js)机制下生效。而你当前使用的是 React Router(react-router-dom 的 <Routes>/<Route>),这套客户端路由系统完全不识别 Next.js 的 getStaticProps、getServerSideProps 这类方法,自然不会触发它。

解决方向

方案1:继续使用 React Router,调整数据获取逻辑

把数据获取逻辑移到组件内部,用 React 的 useEffect 或 React 18+ 的 use 钩子实现异步数据获取,示例代码:

import { useParams } from 'react-router-dom';
import { withSSRContext } from 'aws-amplify';
import { serializeModel } from '@aws-amplify/datastore';
import { useState, useEffect } from 'react';

export default function Detail() {
  const { id } = useParams();
  const [yawara, setYawara] = useState(null);
  const [loading, setLoading] = useState(true);

  useEffect(() => {
    const fetchData = async () => {
      console.log("Fetching data!");
      const SSR = withSSRContext();
      // 注意:query是异步方法,必须加await
      const data = await SSR.DataStore.query(YawaraModel, id);
      setYawara(serializeModel(data));
      setLoading(false);
    };
    fetchData();
  }, [id]);

  if (loading) return <p>Loading...</p>;
  if (!yawara) return <p>Not found!</p>;

  console.log("Detail!");
  return <TechniqueListCard yawaraModel={yawara}/>;
}

方案2:切换到 Next.js 文件系统路由,保留 getStaticProps

如果你想继续使用 getStaticProps,需要将页面组件放在 Next.js 的 pages 目录下(比如 pages/[id].js),Next.js 会自动基于文件路径生成路由,并在构建或请求时触发 getStaticProps。同时注意修复原代码里的异步问题:给 SSR.DataStore.query 加上 await,否则会把 Promise 传给 serializeModel,导致数据错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 19:53:31