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

如何在BrowserRouter路径中插值数组索引?React投资组合路由跳转问题

问题分析

你的核心问题是点击卡片时,路由里的投资组合ID无法正确获取——当前代码中goToPortfolioClick函数里使用portfolios.id,但portfolios是一个数组,数组本身没有id属性,自然无法得到对应卡片的ID。

解决方案

有两种直接可行的修复方式:

方式一:给点击事件传入当前投资组合ID

修改点击事件函数,让它接收当前卡片对应的投资组合ID,再进行路由跳转:

const goToPortfolioClick = (portfolioId) => {
  navigate(`/current-portfolio/${portfolioId}/`);
}

const mappedPortfolioNames = portfolios.map(p => (
  <StyledCard 
    key={p.id}
    id={p.id}
    onClick={() => goToPortfolioClick(p.id)}>  
    Portfolio: {p.id} <br/>
    {p.portfolio_name}
  </StyledCard>
))

方式二:使用React Router的Link组件(更推荐)

既然是路由跳转场景,直接用Link组件替代手动navigate调用更符合React Router的设计规范,代码更简洁且无需维护点击事件:

// 保留其他导入,修改mappedPortfolioNames部分
const mappedPortfolioNames = portfolios.map(p => (
  <Link key={p.id} to={`/current-portfolio/${p.id}/`} style={{ textDecoration: 'none', color: 'inherit' }}>
    <StyledCard id={p.id}>  
      Portfolio: {p.id} <br/>
      {p.portfolio_name}
    </StyledCard>
  </Link>
))

注:添加style是为了消除Link默认的文本样式,避免影响你的StyledCard样式,可根据实际情况调整。

额外说明

后端是Rails多对多关系的话,只要前端路由传的ID正确,后端就能通过这个ID关联到对应的股票列表,所以重点就是确保路由中的ID是当前点击的投资组合的真实ID。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 01:13:12