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

NextJS 13 App Router中如何使用useRouter实现query参数跳转?

在NextJS 13 App Router中实现带Query参数的路由跳转

你之前的写法是旧版Pages Router的API,在App Router里不适用,因为App Router的路由API已经更新,下面是正确的实现方式:

  1. 必须声明为客户端组件
    在使用路由跳转的组件顶部添加'use client'指令,App Router默认是服务器组件,无法直接调用客户端路由API:

    'use client';
    import { useRouter } from 'next/navigation';
    
  2. 两种正确的跳转写法

    • 直接拼接URL字符串
      export default function DonateButton() {
        const router = useRouter();
        return (
          <button onClick={() => {
            router.push('/donate/payment?amount=20');
          }}>Donate</button>
        );
      }
      
    • 使用searchParams对象(替代旧版的query参数)
      export default function DonateButton() {
        const router = useRouter();
        return (
          <button onClick={() => {
            router.push({
              pathname: '/donate/payment',
              searchParams: { amount: 20 }
            });
          }}>Donate</button>
        );
      }
      
  3. 常见排查点

    • 确认/donate/payment对应的页面组件存在于app/donate/payment目录下(App Router路由基于文件系统)
    • 打开浏览器控制台查看是否有报错,比如路由不存在、组件未声明为客户端组件等

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 12:04:57