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

React映射仅显示单个项目及图片加载失败问题求助

问题解决:React项目中Portfolio仅显示单个项目且图片加载失败

一、仅显示单个项目的修复

1. 修正数据结构错误

原数据文件中所有项目都被写在同一个对象里,导致数组长度为1,map仅执行一次。需要将每个项目拆分为独立对象:

const data = [
  {
    id: 1,
    img: "../../assets/portfolio1.jpg",
    firstMedia: {
      mediaName: "Github",
      mediaUrl: "https://github.com",
    },
    secondMedia: {
      mediaName: "dribble",
      mediaUrl: "https://dribbble.com"
    }
  },
  {
    id: 2,
    img: "../../assets/portfolio2.jpg",
    firstMedia: {
      mediaName: "Github",
      mediaUrl: "https://github.com",
    },
    secondMedia: {
      mediaName: "dribble",
      mediaUrl: "https://dribbble.com"
    }
  },
  {
    id: 3,
    img: "../../assets/portfolio3.jpg",
    firstMedia: {
      mediaName: "Github",
      mediaUrl: "https://github.com",
    },
    secondMedia: {
      mediaName: "dribble",
      mediaUrl: "https://dribbble.com"
    }
  },
  {
    id: 4,
    img: "../../assets/portfolio4.jpg",
    firstMedia: {
      mediaName: "Github",
      mediaUrl: "https://github.com",
    },
    secondMedia: {
      mediaName: "dribble",
      mediaUrl: "https://dribbble.com"
    }
  },
  {
    id: 5,
    img: "../../assets/portfolio5.jpg",
    firstMedia: {
      mediaName: "Github",
      mediaUrl: "https://github.com",
    },
    secondMedia: {
      mediaName: "dribble",
      mediaUrl: "https://dribbble.com"
    }
  },
  {
    id: 6,
    img: "../../assets/portfolio6.jpg",
    firstMedia: {
      mediaName: "Github",
      mediaUrl: "https://github.com",
    },
    secondMedia: {
      mediaName: "dribble",
      mediaUrl: "https://dribbble.com"
    }
  }
]

export default data;

2. 重构Portfolio组件结构

原组件将整个<section>放入map循环,导致每个项目生成独立的标题区块,且key位置错误。需将固定标题和容器放在循环外,仅循环项目卡片:

import React from 'react'
import './portfolio.css'

const Portfolio = ({ items }) => {
    return (
        <section id="portfolio" >
            <h5>My Recent Works</h5>
            <h2>Portfolio</h2>
            <div className="container portfolio__container" >
                {items && items.map((item) => {
                    const { id, img, firstMedia, secondMedia } = item;
                    return (
                        <article className="portfolio__item" key={id}>
                            <div className="portfolio__item-image">
                                <img src={img} alt={`Portfolio item ${id}`} />
                            </div>
                            <h3>This is a portfolio item title</h3>
                            <div className="portfolio__item-cta">
                                <a href={firstMedia.mediaUrl} className={'btn'} target={'_blank'} rel="noreferrer"> 
                                    {firstMedia.mediaName}
                                </a>
                                <a href={secondMedia.mediaUrl} className={'btn btn-primary'} target="_blank" rel="noreferrer"> 
                                    {secondMedia.mediaName}
                                </a>
                            </div>
                        </article>
                    )
                })}
            </div>
        </section>
    )
}
export default Portfolio
  • 注意:key需绑定在循环的最外层元素(<article>)上;给<a>标签添加rel="noreferrer"避免安全警告。

3. 简化App.js传参

原代码中多余的{...item}会传递数组索引作为无效props,修改为:

<Portfolio items={item} />

二、图片加载失败的修复

1. 修正图片路径

React中图片路径处理有两种可靠方式:

方法一:通过import导入图片

在数据文件中直接导入图片资源,避免路径错误:

import portfolio1 from '../../assets/portfolio1.jpg'
import portfolio2 from '../../assets/portfolio2.jpg'
import portfolio3 from '../../assets/portfolio3.jpg'
import portfolio4 from '../../assets/portfolio4.jpg'
import portfolio5 from '../../assets/portfolio5.jpg'
import portfolio6 from '../../assets/portfolio6.jpg'

const data = [
  {
    id: 1,
    img: portfolio1,
    // 其他属性不变
  },
  {
    id: 2,
    img: portfolio2,
    // 其他属性不变
  },
  // 剩余项目依次替换img值
]

方法二:使用public文件夹绝对路径

将assets文件夹移至项目根目录的public文件夹下,路径改为绝对路径:

const data = [
  {
    id: 1,
    img: "/assets/portfolio1.jpg",
    // 其他属性不变
  }
  // 剩余项目同理修改img路径
]

2. 校验图片资源

确认图片文件名拼写(大小写敏感)、格式(jpg/png等)正确,且文件确实存在于对应路径下。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 15:36:08