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

Next.js动态路由中useSearchParams获取ID返回Null的问题

问题原因与解决方案

你遇到的问题核心是:混淆了动态路由参数和URL查询参数的获取方式。

你跳转的/pages/users/${id}属于动态路由路径参数(比如/pages/users/1里的1),而useSearchParams是用来获取URL中?key=value形式的查询参数(比如/pages/users?id=1),所以用它拿动态路由参数自然会返回null。


解决方法1:客户端组件用useParams获取动态路由参数

修改你的UserDetail组件,替换useSearchParams为useParams:

'use client'

import { useParams } from "next/navigation";

const UserDetail = () => {
  // 用泛型指定参数类型,确保类型安全
  const params = useParams<{ id: string }>();
  const userId = params.id;

  return (
    <div className="text-gray-200">
      <h1>User Details</h1>
      <p>User ID from Router: {userId}</p>
    </div>
  );
};

export default UserDetail;

解决方法2:服务器组件直接从props读取参数

如果UserDetail不需要客户端交互,可以去掉'use client'标记,作为服务器组件直接接收路由参数:

// app/pages/users/[id]/page.tsx
type Props = {
  params: { id: string };
};

const UserDetail = ({ params }: Props) => {
  const userId = params.id;

  return (
    <div className="text-gray-200">
      <h1>User Details</h1>
      <p>User ID from Router: {userId}</p>
    </div>
  );
};

export default UserDetail;

额外检查

确认你的跳转路径和页面结构对应:你的页面文件在app/pages/users/[id]/page.tsx,所以push(/pages/users/${id})的路径是正确的,无需修改。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 21:06:06