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

React中从列表引入图片失败:动态require路径失效问题求助

React中动态使用列表内图片路径作为src无效的问题

我在React组件里尝试用列表中的图片路径作为Card.Img的图片源,但src设置无效。不过Button里显示的{images[idx]}路径是正确的,直接把列表里的具体路径写进src就能正常显示。

代码如下:

import Button from 'react-bootstrap/Button';
import Card from 'react-bootstrap/Card';

const ProductComponent = ({ category, idx }) =>{
  const images = [
    './unisex-heavy-blend-hoodie-black-zoomed-in-2-638cce72d61d2.png',
    './unisex-staple-t-shirt-silver-front-638ca71569cc4.png',
    './unisex-staple-t-shirt-black-heather-zoomed-in-638ca1af35d94.png'
  ]
  return (
    <Card style={{ width: '25rem' }}>
      <Card.Img variant="top"  src={require(images[idx])} />
      <Card.Body>
        <Card.Title>{category}</Card.Title>
        <Button variant="primary">{images[idx]}</Button>
      </Card.Body>
    </Card>
  );
}

export default ProductComponent;

问题原因

Webpack这类React项目常用的打包工具,在处理require加载资源时,需要编译阶段就能确定具体的文件路径,这样才能提前定位并打包对应的图片资源。你现在用require(images[idx])是动态传入变量,Webpack无法在编译时预判到要加载的具体文件,因此无法正确解析图片资源,最终导致图片加载失败。而Button里只是渲染字符串路径,不需要Webpack处理资源打包,所以能正常显示。

解决方法

方法1:提前用require处理所有图片路径

把列表里的路径直接通过require预加载,让Webpack在编译阶段就打包这些图片:

const images = [
  require('./unisex-heavy-blend-hoodie-black-zoomed-in-2-638cce72d61d2.png'),
  require('./unisex-staple-t-shirt-silver-front-638ca71569cc4.png'),
  require('./unisex-staple-t-shirt-black-heather-zoomed-in-638ca1af35d94.png')
]

之后直接使用即可:

<Card.Img variant="top" src={images[idx]} />

方法2:用import提前导入图片

也可以通过import语句逐一导入图片,再存入列表:

import img1 from './unisex-heavy-blend-hoodie-black-zoomed-in-2-638cce72d61d2.png';
import img2 from './unisex-staple-t-shirt-silver-front-638ca71569cc4.png';
import img3 from './unisex-staple-t-shirt-black-heather-zoomed-in-638ca1af35d94.png';

const images = [img1, img2, img3];

使用方式和上面一致,直接src={images[idx]}。

方法3:将图片放入public目录

如果把图片放在React项目的public文件夹下,就可以直接使用绝对/相对路径,不需要require或import:

const images = [
  '/unisex-heavy-blend-hoodie-black-zoomed-in-2-638cce72d61d2.png',
  '/unisex-staple-t-shirt-silver-front-638ca71569cc4.png',
  '/unisex-staple-t-shirt-black-heather-zoomed-in-638ca1af35d94.png'
]

然后直接赋值给src:

<Card.Img variant="top" src={images[idx]} />

这种方式下,Webpack不会处理这些图片,它们会被直接复制到构建后的public目录中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 07:05:21