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

使用useParams时数组过滤/映射失效,product/:id页面无商品图片显示问题

问题排查与修复方案

核心问题

useParams 返回的路由参数是字符串类型,和数据源中数字类型的id全等于比较永远为false
你在ProductScreen中执行product.id === id判断时,左侧是数字类型的商品id(1/2/3/4),右侧是字符串类型的路由参数("1"/"2"/"3"/"4"),全等判断不成立,filter返回空数组,map没有可渲染的内容,最终只显示空div。

修复步骤

  • 第一步:将路由获取的id转换为数字类型,同时可以用find替代filter+map简化代码(商品id唯一,无需过滤数组,直接查找单个商品即可)
    完整修改后的ProductScreen代码如下:
    import React from 'react'
    import { Link, useParams } from 'react-router-dom'
    import { Row, Col, Image, ListGroup, Card, Button } from 'react-bootstrap'
    import products from '../products'
    import Product from '../components/Product'
    
    
    const ProductScreen = () => {
        const { id } = useParams()
        // 转换id为数字类型,查找对应商品
        const currentProduct = products.find(product => product.id === Number(id))
      
        return (
        <>
              <Link className='btn btn-light my-3' to='/'>
                  GO BACK
              </Link>
                  <div>
                  <Row>
                    <Col md={8}>
                    {/* 匹配到商品才渲染 */}
                    {currentProduct && (
                          <div>
                              {/* 加fluid属性让图片自适应容器宽度 */}
                              <Image src={currentProduct.image} alt={currentProduct.name} fluid />
                          </div>
                    )}
                    </Col>
                    <Col md={4}></Col>
                   </Row>
                  </div>
        </>
      )
    }
    
    export default ProductScreen
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 14:36:03