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

Next.js动态路由容器调用getServerSideProps返回undefined如何解决

问题原因
  • Next.js Pages 路由的规则是,只有路由匹配的页面入口文件中导出的getServerSideProps才会被框架自动执行。你的路由入口是/Pages/history/[hid]/index.tsx,但getServerSideProps写在了非入口的HistoryDetailContainer.tsx中,这个函数不会被调用,自然没有props传入组件。
  • 若你已经将getServerSideProps导出到了入口文件,也可能是index.tsx中没有将拿到的SSR props透传给HistoryDetailContainer组件,导致组件接收不到参数。
解决方法

两种方案任选其一即可:

方案1:将getServerSideProps放到入口文件(推荐)

将HistoryDetailContainer.tsx中的getServerSideProps代码迁移到/[hid]/index.tsx中导出,同时在入口组件内透传所有props给容器组件,示例代码如下:

// /Pages/history/[hid]/index.tsx
import type { NextPage, GetServerSideProps } from 'next'
import HistoryDetailContainer from './HistoryDetailContainer'

const HistoryDetailPage: NextPage = (props) => {
  // 透传Next.js传入的所有SSR props给容器组件
  return <HistoryDetailContainer {...props} />
}

export const getServerSideProps: GetServerSideProps = async (context) => {
  try {
    const ssrData = 'SSR TEST'
    return {
      props: { ssrData }
    }
  } catch (e) {
    console.dir(e)
    return {
      redirect: {
        destination: '/',
        permanent: false
      }
    }
  }
}

export default HistoryDetailPage

方案2:在入口文件重新导出getServerSideProps

如果不想拆分容器组件的逻辑,直接在index.tsx中重新导出容器组件内的getServerSideProps即可,同时记得透传props:

// /Pages/history/[hid]/index.tsx
import HistoryDetailContainer from './HistoryDetailContainer'
// 重新导出容器内的getServerSideProps
export { getServerSideProps } from './HistoryDetailContainer'

export default HistoryDetailContainer

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 00:15:04