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

Next.js 13.4中如何在app目录修改和添加查询字符串?

在Next.js 13.4 App目录中修改URL查询参数的方法

在App Router中修改查询参数的方式和Pages Router有所不同,主要分为客户端组件和服务器组件两种场景:

一、客户端组件中修改

客户端组件需要先声明'use client'指令,然后使用next/navigation提供的useRouter和useSearchParams来操作:

'use client';

import { useRouter, useSearchParams } from 'next/navigation';

export default function PaginationBtn() {
  const router = useRouter();
  const searchParams = useSearchParams();

  const goToNextPage = (currentPage) => {
    // 基于现有查询参数创建新的URLSearchParams实例
    const newSearchParams = new URLSearchParams(searchParams);
    // 更新page参数(这里计算新页码)
    newSearchParams.set('page', (currentPage + 1).toString());
    
    // 用push添加历史记录,replace则替换当前历史记录
    router.push(`?${newSearchParams.toString()}`);
  };

  return (
    <button onClick={() => goToNextPage(Number(searchParams.get('page')) || 0)}>
      下一页
    </button>
  );
}

这种方式会保留原有所有查询参数,仅更新指定的page参数,和你在Pages Router中的逻辑一致,但通过URLSearchParams操作更规范,避免解构遗漏参数。

二、服务器组件中修改

服务器组件无法使用客户端hooks,需要通过redirect函数结合searchParams props来实现:

import { redirect } from 'next/navigation';

export default async function ServerPage({ searchParams }) {
  // 模拟需要更新页码的场景
  const shouldUpdatePage = true;
  if (shouldUpdatePage) {
    const newSearchParams = new URLSearchParams(searchParams);
    newSearchParams.set('page', '3'); // 设置目标页码
    redirect(`?${newSearchParams.toString()}`);
  }

  return <div>当前页面内容</div>;
}

服务器组件会自动接收searchParams props,通过它可以获取当前URL的查询参数,处理后用redirect完成跳转并更新URL。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 01:12:09