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

React组件传参问题:无法接收父组件Products的props?

问题分析与解决

你的问题出在三个核心点上,逐个梳理解决:

1. 路由详情页未传递产品数据

在App.jsx的路由配置中,/product/:id路径直接渲染<SingleProduct />,但这里没有传入任何product数据。当你点击列表链接跳转到详情页时,组件接收不到props,自然会打印undefined。

解决方式:
在详情页的SingleProduct组件中,通过路由参数获取产品id,再从数据源中匹配对应产品:

import { useParams } from 'react-router-dom';
import data from "../data";

const SingleProduct = () => {
  const { id } = useParams();
  // 注意路由id是字符串类型,需转数字匹配数据源中的id
  const product = data.find(item => item.id === parseInt(id));
  console.log(product);

  return (
    <div>
      <figure className='px-4 pt-4'>
        <img
          src={product?.image} // 用可选链避免产品未找到时的报错
          alt='产品图'
          className='rounded-xl h-64 md:h-48 w-full object-cover'
        />
      </figure>
    </div>
  )
}

2. 组件内部变量名错误

你在SingleProduct组件中解构的props是{ product },但return里的img标签却用了prod.image——prod是未定义的变量,必须改成product.image,否则会直接抛出变量未定义的错误。

3. 混淆两种渲染场景

Products组件里的<SingleProduct product={prod} />其实是正确传递了props的,如果你在首页(Products页面)查看控制台,这里的SingleProduct会打印出正确的产品数据。但你大概率是在跳转到/product/:id详情页后查看的log,此时路由渲染的是未传props的SingleProduct,所以才会出现undefined。

总结:

  • 详情页的SingleProduct需要通过路由参数自行获取产品数据
  • 修正组件内部的变量名错误
  • 区分列表页和详情页的SingleProduct渲染逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 13:25:55