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

React购物车开发:图片重复渲染25次问题求助

React购物车图片重复渲染问题解决

问题描述

开发基于JSON数据库的购物车时,映射图片渲染到网页后,图片被重复渲染25次,次数与JSON文件中的数据条数一致。

现有代码

SingleProduct组件

import React from 'react';
import products from '../productData.json';
import './style.css';


const SingleProduct = () => {
  return (
    <div >
       {
          products.map((prod)=>
            <div  className="image">
              <img  src={prod.image} style={{width:"20%"}}  alt="logo" />
            </div>
          )
       }
    </div>
  )
}

export default SingleProduct

Home组件

import React from 'react'
import { CartState } from '../context/Context';
import './style.css';
import SingleProduct from './SingleProduct';
import Filters from './Filters';

const Home = () => {

  const { state:{products} } = CartState();
  

  return (
    <div className='home'>
      <Filters />
      <div className="productContainer"> 
      {
            products.map((prod)=>{
          return <SingleProduct prod={prod} key={prod.id} />
        })
      }

      </div>
    </div>
  )
}

export default Home

问题原因

SingleProduct组件内部自行导入完整的products数组并遍历渲染,同时Home组件又对products数组做了一次遍历,每次循环都渲染一个SingleProduct组件。这导致了双重遍历:Home循环25次生成25个SingleProduct,每个SingleProduct又循环25次渲染所有产品图片,最终出现图片重复渲染的问题。

解决方案

修改SingleProduct组件,移除内部的products数组导入和遍历逻辑,改为接收父组件传递的prod props,只渲染单个产品的图片:

import React from 'react';
import './style.css';

const SingleProduct = ({ prod }) => {
  return (
    <div className="image">
      <img src={prod.image} style={{width:"20%"}} alt="product" />
    </div>
  )
}

export default SingleProduct

说明

修改后,Home组件遍历products数组时,每次将单个prod对象传递给SingleProduct,组件仅渲染当前产品的图片,避免了重复遍历,图片渲染次数将与产品条数一致,不再重复。

内容的提问来源于stack exchange,提问作者Siva. subramanaian

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 01:40:33