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

Next.js 13使用useRouter获取查询参数报错:router.query未定义

解决Next.js 13中useRouter无法访问query参数的问题

问题根源

你导入的是App Router(Next.js 13+ app目录)的useRouter(来自next/navigation),但参考的是Pages Router(pages目录)的文档。两者API完全不同:App Router的useRouter没有query属性,这就是报错的直接原因。

解决方案

根据你使用的路由系统选择对应方案:

方案1:使用App Router(app目录)

方式A:用useSearchParams获取查询参数

如果要获取URL中的查询参数(比如?id=123),使用useSearchParams钩子:

'use client'
import { useSearchParams } from 'next/navigation';

const Post = () => {
  const searchParams = useSearchParams();
  const postId = searchParams.get('id');

  return (
    <div>
      post number : {postId}
    </div>
  )
}

export default Post

方式B:动态路由直接用params(服务器组件)

如果是动态路由(比如app/post/[id]/page.js),在服务器组件中可以直接接收params参数:

// app/post/[id]/page.js(无需'use client')
export default function Post({ params }) {
  return (
    <div>
      post number : {params.id}
    </div>
  )
}

方案2:使用Pages Router(pages目录)

如果你是在pages目录下开发,需要从next/router导入useRouter,而不是next/navigation:

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

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

  return (
    <div>
      post number : {id}
    </div>
  )
}

export default Post

补充说明

你参考的「Routing:Dynamic Routes」章节属于Pages Router的文档,Next.js 13+的App Router有独立的路由规则,使用前要确认自己的项目结构是app目录还是pages目录。

内容的提问来源于stack exchange,提问作者Lifa Mohammed Seddik

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 02:35:05