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

React中如何将带变量的路由与数组变量合并?

问题描述

路由配置:

const routers = {
  home: '/',
  category: '/category/:slug',
}

数据数组:

const array = [
  { id: 1, slug: 'table'},
  { id: 2, slug: 'chair'},
]

使用array.map()生成NavLink的代码:

array.map(item => {
  return <NavLink key={item.id} to={routers.category+item.slug}>
    {item.slug}
  </NavLink>
})

当前生成错误路径:localhost:3000/category/:slugtable、localhost:3000/category/:slugchair,预期正确路径应为localhost:3000/category/table。

解决方案

方法1:字符串替换占位符

直接替换路由配置里的:slug占位符为实际值:

array.map(item => {
  return <NavLink key={item.id} to={routers.category.replace(':slug', item.slug)}>
    {item.slug}
  </NavLink>
})

方法2:模板字符串手动构建路径

修改路由配置为基础路径,再用模板字符串拼接:

// 更新路由配置
const routers = {
  home: '/',
  category: '/category',
}
array.map(item => {
  return <NavLink key={item.id} to={`${routers.category}/${item.slug}`}>
    {item.slug}
  </NavLink>
})

方法3:使用React Router官方工具函数(推荐)

如果使用React Router v6+,用官方提供的generatePath处理带参数的路由,更规范:

import { generatePath } from 'react-router-dom';
array.map(item => {
  return <NavLink key={item.id} to={generatePath(routers.category, { slug: item.slug })}>
    {item.slug}
  </NavLink>
})

该函数会自动识别路由中的占位符并替换为对应参数值,适配复杂路由场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 21:20:23