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

Next/link跳转显示/post/[slug]路径同时传递id调用API的实现问题问询

Next.js使用next/link实现隐藏参数跳转的解决方案

问题本质:你之前将id放在href的query参数中,Next.js渲染路径时,除了匹配pathname动态路由的参数(也就是slug),剩余的query参数都会自动拼接在URL的?后面,因此id会暴露出来。以下是两种可行方案:

方案1:用Link的state属性传递隐藏参数(无需修改后端逻辑)

next/link原生支持state属性,参数会存在浏览器会话历史中,不会出现在URL上,Pages Router和App Router都适用。

跳转端写法

import Link from 'next/link'

// 组件内调用
<Link 
  href={{
    pathname: '/post/[slug]',
    query: { slug: 'next-js' } // 只放需要显示在路径里的参数
  }}
  state={{ id: 123 }} // 隐藏参数放在这里
>
  跳转到对应文章
</Link>

目标页取值

如果你用Pages Router

import { useRouter } from 'next/router'

export default function PostPage() {
  const router = useRouter()
  const { slug } = router.query
  const { id } = router.state || {} // 拿到隐藏的id参数
  
  // 后续直接用id调用接口即可
}

如果你用App Router

'use client'
import { useParams } from 'next/navigation'

export default function PostPage() {
  const { slug } = useParams()
  const id = window.history.state?.id // 从会话历史取隐藏id

  // 降级逻辑:如果用户直接刷新页面导致state丢失,可以通过slug调用一次查询接口拿到对应id
}

注意:state仅在通过Link跳转时存在,用户刷新页面、直接输入URL访问时会丢失,需要补充降级逻辑。

方案2:后端适配slug查询(最优方案,支持所有访问场景)

直接修改后端接口,支持传入slug参数查询对应文章数据,跳转时不需要传递id,完全避免id暴露的问题,同时用户刷新、收藏链接都能正常访问,无需额外处理状态丢失问题。
跳转写法可以简化为:

<Link href="/post/next-js">跳转到对应文章</Link>

目标页直接用slug调用接口即可,不需要处理隐藏参数。

内容的提问来源于stack exchange,提问作者tran dinh thang

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 20:45:03