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

React中NavLink跳转后img标签无法渲染图片的问题

问题原因与解决方案

核心原因:相对路径解析错误

当通过NavLink跳转到/country/${country.id}这类嵌套路由时,页面URL层级变为二级路径(比如/country/0)。此时img标签的src使用相对路径images/new_0.jpg,浏览器会将其解析为/country/images/new_0.jpg,但你的图片实际存放在根目录的/images文件夹下,导致资源找不到。

而直接在App.js中调用CountryInfo时,页面URL是根路径(/),相对路径会被正确解析为/images/new_0.jpg,因此图片能正常显示。

解决办法

1. 修改为绝对路径

直接在图片路径前添加/,确保从根目录开始查找资源:
修改data.jsx中的路径:

const data = [
  {
    id: 0,
    name: "Singapore",
    url: "/images/card_singapore.jpg",
    price: "$ 300",
    day: 5,
    images: {
      image1: "/images/new_0.jpg",
      image2: "/images/new_1.jpg",
      image3: "/images/new_2.jpg",
      image4: "/images/new_3.jpg",
    },
  },
  // 其他数据...
];

2. 使用Create React App的PUBLIC_URL(推荐)

如果是Create React App构建的项目,用process.env.PUBLIC_URL适配不同部署环境:
修改CountryInfo.jsx中img的src:

<img
  src={`${process.env.PUBLIC_URL}/${image1Url}`}
  alt={countryData[countryId].name}
  style={{ height: "100vh", width: "100vw" }}
/>

同时保持data.jsx中的路径为相对public文件夹的格式,比如images/new_0.jpg即可。

3. 调整路由相对路径配置

在NavLink中添加relative="path"属性,让路由跳转时保持路径解析的一致性:

<NavLink
  to={`/country/${country.id}`}
  state={{ data: country.id }}
  relative="path"
>
  {/* Card code */}
</NavLink>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 19:58:29