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

React/Next.js中如何给动态路由传递额外参数?

解决方案:在Next.js中传递额外参数并在getServerSideProps中获取

方案一:使用查询参数(Query Params)

这种方式无需修改路由结构,是最直接的实现方式,不会触发404错误。

1. 修改Link组件传递参数

把hidden参数作为查询字符串附加到URL后,或者用Next.js推荐的href对象格式传递:

// 方式1:模板字符串拼接
<Link href={`/${post.slug}?hidden=your-value`}>
  <a>点击跳转</a>
</Link>

// 方式2:对象格式(更易维护)
<Link href={{
  pathname: `/${post.slug}`,
  query: { hidden: 'your-value' } // 传递hidden参数
}}>
  <a>点击跳转</a>
</Link>

2. 在getServerSideProps中获取参数

查询参数不在params对象里,而是在query对象中,同时修正你代码里的语法错误(elseif应为else if,提前声明变量避免作用域问题):

export const getServerSideProps = async ({ params, query }) => {
    console.log('slug参数:', params.slug);
    console.log('hidden参数:', query.hidden); // 从query中获取hidden

    let blogs;
    if (query.hidden) {
        // 执行hidden参数对应的API逻辑
        const { data } = await Axios.get(`https://xxx/your-hidden-api-endpoint?hidden=${query.hidden}`);
        blogs = data;
    } else {
        // 原有的slug逻辑
        const { data } = await Axios.get(`https://xxxxxxxxxxxxxxxxxxxxxxxxx/${params.slug}`);
        blogs = data;
    }

    return {
        props: {
            blogs
        },
    };
};

方案二:使用扩展动态路由(适合把参数放到URL路径中的场景)

如果希望URL格式为/${post.slug}/hidden-value,需要调整页面路由结构:

1. 调整页面目录结构

在pages目录下创建[slug]文件夹,里面新建[hidden].js文件,原slug.js可保留作为无hidden参数时的页面。

2. 修改Link组件跳转路径

<Link href={`/${post.slug}/your-hidden-value`}>
  <a>点击跳转</a>
</Link>

3. 在新页面的getServerSideProps中获取参数

此时params对象会同时包含slug和hidden:

export const getServerSideProps = async ({ params }) => {
    console.log('slug:', params.slug);
    console.log('hidden:', params.hidden);

    let blogs;
    if (params.hidden) {
        // 对应API逻辑
        const { data } = await Axios.get(`https://xxx/api-with-hidden/${params.hidden}`);
        blogs = data;
    } else {
        // 备用逻辑
        const { data } = await Axios.get(`https://xxxxxxxxxxxxxxxxxxxxxxxxx/${params.slug}`);
        blogs = data;
    }

    return {
        props: {
            blogs
        },
    };
};

注意事项

  • 之前的404错误是因为错误修改动态路由但未配置对应页面文件,或者传参方式不符合路由规则。
  • 方案一更适合仅部分页面需要传递hidden参数的场景,不会影响原有页面的正常访问。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 12:30:54