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

Next.js技术问题:无法从Link跳转页面获取id参数

解决Next.js动态路由参数获取问题

根据你的代码和场景,问题出在动态路由参数的获取方式上,以下分两种Next.js路由系统给出解决方案:

一、Pages Router(Next.js 12及更早版本)

1. 确保路由文件命名正确

你的页面文件必须放在pages/product目录下,且命名为[id].js(或.tsx等),方括号里的id要和你要获取的参数名一致。

2. 服务端/静态渲染页面获取参数

如果页面使用getServerSideProps或getStaticProps,需要从上下文的params中提取ID,再传递给页面组件:

// pages/product/[id].js
export async function getServerSideProps(context) {
  // 从context.params中获取动态路由参数
  const { id } = context.params;
  
  return {
    props: { id } // 将ID传递给页面组件
  };
}

const ProductPage = ({ id }) => {
  console.log(id); // 现在能正常输出ID
  return <div>当前产品ID:{id}</div>;
};

export default ProductPage;

3. 客户端渲染页面获取参数

如果是纯客户端组件,使用useRouter钩子从router.query中获取:

// pages/product/[id].js
import { useRouter } from 'next/router';

const ProductPage = () => {
  const router = useRouter();
  const { id } = router.query;

  // 注意:首次加载时router.query可能为空,可加判断避免报错
  if (!id) return <div>加载中...</div>;
  
  console.log(id);
  return <div>当前产品ID:{id}</div>;
};

export default ProductPage;

二、App Router(Next.js 13+)

1. 确保路由结构正确

页面文件需放在app/product/[id]目录下,命名为page.js(或.tsx),[id]目录对应动态参数名。

2. 直接从params解构获取

App Router的页面组件可以直接接收params参数:

// app/product/[id]/page.js
export default function ProductPage({ params }) {
  const { id } = params;
  
  console.log(id); // 正常输出ID
  return <div>当前产品ID:{id}</div>;
}

3. 客户端组件使用useParams钩子

如果是客户端组件(需加'use client'指令),使用useParams钩子:

// app/product/[id]/page.js
'use client';
import { useParams } from 'next/navigation';

export default function ProductPage() {
  const params = useParams();
  const id = params.id;
  
  console.log(id);
  return <div>当前产品ID:{id}</div>;
}

关键注意点

  • 动态路由的参数名必须和文件/目录的方括号内名称一致(比如你用[id],就只能获取id参数)
  • 如果是App Router,确保你的Next.js版本在13及以上,且开启了App Router模式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 10:33:28