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

NextJS动态页面数据/Props传递异常问题排查

问题分析与解决

你的问题出在动态参数匹配和数据查找条件两个核心环节,具体错误点和修复方法如下:

1. 动态页面的参数名不匹配

你的动态页面文件名为[video].tsx,这意味着Next.js会将URL中对应的片段解析为params.video,而非你定义的params.id。

修复:

修改VideoParams接口:

interface VideoParams {
  video: string; // 替换原来的id字段
}

同时在getServerSideProps中,使用params.video获取URL中的视频ID:

export async function getServerSideProps({ params }: { params: VideoParams }) {
  // ...其他代码
  console.log(params.video); // 现在能正确拿到视频ID
  // ...
}

2. 数据查找的字段不匹配

你在查找视频时用了item.link === params.id,但你的数据中不存在link字段,对应的正确字段是videoID,且参数需替换为修正后的params.video。

修复:

修改getServerSideProps中的查找逻辑:

const video = json.find((item: any) => item.videoID === params.video);

3. 可选优化:Link组件的写法(Pages Router)

如果你使用的是Next.js Pages Router,虽然as属性能生效,但更推荐标准化的query对象写法,避免路径拼接错误:

<Link
  href={{
    pathname: "/videos/normal/[video]",
    query: { video: item.videoID }
  }}
>
  <HoverVideoPlayer videoSrc={item.videoLink} />
</Link>

修复后的完整[video].tsx代码

import React from 'react';

const VideoPage = (props: {
  video: any;
}) => {
  if (!props.video) {
    return <p>Video not found</p>;
  }
  return (
    <div>
      <h1>{props.video.videoTitle}</h1>
    </div>
  );
};

interface VideoParams {
  video: string;
}

export async function getServerSideProps({ params }: { params: VideoParams }) {
  const res = await fetch('https://www.externalsource.com/VideoData.json');
  const json = await res.json();

  console.log(params.video);
  console.log(json); 

  const video = json.find((item: any) => item.videoID === params.video);

  console.log(video); 

  return {
    props: {
      video: video || null,
    },
  };
}

export default VideoPage;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 13:31:08