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

ReactJs中使用JSON数据渲染项目关联图片失败如何解决

问题根因

JSON中存储的id为字符串类型,你在代码顶部import导入的p1~p6是独立的资源变量,二者没有绑定关系。直接将字符串"p1"传入img标签的src属性时,浏览器会将其识别为相对路径发起资源请求,自然无法加载到正确的图片。

解决方法

完全不需要放弃JSON实现需求,只需要新增一层图片映射关系即可,修改后的代码如下:

import Pdata from "../../api/projects.json";
import p1 from "../../img/Project/PoleAnglais.png";
import p2 from "../../img/Project/I-Art.png";
import p3 from "../../img/Project/Hestia.png";
import p4 from "../../img/Project/EvlV1.png";
import p5 from "../../img/Project/Kelly.png";
import p6 from "../../img/Project/EthLnyV2.png";
import { Component } from "react";

// 新增图片映射对象,key和JSON中的id一一对应
const imgMap = {
  p1: p1,
  p2: p2,
  p3: p3,
  p4: p4,
  p5: p5,
  p6: p6
}

class Plist extends Component {
  render() {
    return (
      <div
        className="project-list"
        data-aos="fade-right"
        data-aos-duration="1200"
      >
        {Pdata.map((projectDetail, index) => {
          return (
            <div className="project-block" key={index}>
              <h2 className="project-title">{projectDetail.title}</h2>
              <p className="date">{projectDetail.date}</p>
              <p className="project-desc">{projectDetail.desc}</p>
              {/* 从映射对象中取对应图片资源,alt补充项目名优化无障碍体验 */}
              <img src={imgMap[projectDetail.id]} alt={projectDetail.title} />
              <p className="madewith">made with {projectDetail.tags}</p>
            </div>
          );
        })}
      </div>
    );
  }
}
export default Plist;

后续优化提示

后续新增项目时,只需要在JSON中添加对应项目条目,同时在imgMap中新增一条id和导入图片的映射关系即可,无需修改渲染逻辑,仍可满足你简化项目新增操作的需求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 19:15:00