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

Next.js 13.4+如何从页面路由(非API路由)获取搜索参数?

在Next.js 13.4及以上版本获取页面路由的搜索参数

针对App Router(app目录)

如果你的项目用的是13.4+稳定版的App Router,原来next/router里的useRouter已经不再适用,需要换成next/navigation提供的useSearchParams钩子。

示例代码:

'use client'; // 必须添加,因为useSearchParams是客户端专属钩子
import { useSearchParams } from 'next/navigation';

export default function TacoPage() {
  const searchParams = useSearchParams();
  
  // 获取单个搜索参数
  const taco = searchParams.get('taco');
  // 若存在多个同名参数(比如?taco=牛肉&taco=鸡肉),用getAll返回数组
  const tacoOptions = searchParams.getAll('taco');

  return (
    <div>
      <p>选中的taco:{taco}</p>
      <p>所有taco选项:{tacoOptions.join(', ')}</p>
    </div>
  );
}

针对Pages Router(pages目录)

要是你还在使用传统的Pages Router,原来的useRouter其实仍然有效,之前失效大概率是组件被误标记为服务器组件,或是没处理router.query初始化时的空值问题。

正常使用示例:

import { useRouter } from 'next/router';
import { useEffect, useState } from 'react';

export default function TacoPage() {
  const router = useRouter();
  const [taco, setTaco] = useState('');

  useEffect(() => {
    // 监听query变化,确保参数加载完成后再取值
    if (router.query.taco) {
      setTaco(router.query.taco);
    }
  }, [router.query]);

  return <div>当前taco参数:{taco}</div>;
}

如果需要在服务器端直接获取参数,用getServerSideProps更稳妥:

export async function getServerSideProps(context) {
  // 从context.query中直接读取搜索参数
  const taco = context.query.taco;
  return {
    props: { taco },
  };
}

export default function TacoPage({ taco }) {
  return <div>服务器端获取的taco参数:{taco}</div>;
}

内容的提问来源于stack exchange,提问作者Octo Palm Tree

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 20:17:20