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

如何在React.js中使用状态变量动态切换图片源?

解决React中图片源动态切换的问题

我来帮你搞定这个图片切换的问题!你的代码里有两个关键问题导致图片无法正常显示,咱们一步步修正:

1. 修正JavaScript内置对象的拼写错误

你在生成随机item的时候用了math.floor(),但JavaScript里的数学对象是大写开头的Math,小写的math是未定义的变量,这会导致getNew函数执行出错,连随机选择图片的逻辑都跑不起来。把它改成Math.floor()就好。

2. 正确处理React中的动态图片路径

React项目里,直接用字符串形式的相对路径(比如./images/test1.jpg)作为img的src是不行的——因为webpack在打包时只会处理通过import或require引入的资源,单纯的字符串路径不会被解析成打包后的正确URL,浏览器自然找不到图片。

这里给你两种可行的解决方案:

方案一:将图片放在public文件夹中

把你的图片文件移到项目根目录的public/images文件夹下,然后修改items里的路径为根路径开头的绝对路径:

const items = [
  {ItemName: 'test1', ItemImg: '/images/test1.jpg'}, 
  {ItemName: 'test2', ItemImg: '/images/test2.jpg'} 
];

public文件夹下的资源可以直接通过根路径访问,这样setState后img就能正确加载图片了。

方案二:用require动态引入src下的图片

如果图片还是想放在src目录的images文件夹里,那就用require()来动态引入图片资源,修改setState的逻辑:

this.setState({
  img_path: require(item.ItemImg).default,
  alt: item.ItemName
});

注意:这里的item.ItemImg路径要和组件文件的相对路径一致(比如你的组件在src目录下,图片在src/images,那路径就是./images/test1.jpg)。

另外还要提个小细节:React的组件名必须大写开头,你的myImg应该改成MyImg,不然React会把它当成普通HTML标签处理,可能引发其他问题。

修正后的完整代码

import React, { Component } from 'react';
import Blank from './images/blank.jpg';

class MyImg extends Component {
  constructor(props) {
    super(props);
    this.state = {
      img_path: Blank,
      alt: 'blank',
    };
    this.getNew = this.getNew.bind(this);
  }

  getNew() {
    const items = [
      {ItemName: 'test1', ItemImg: './images/test1.jpg'}, 
      {ItemName: 'test2', ItemImg: './images/test2.jpg'} 
    ];
    // 修正Math的拼写
    var item = items[Math.floor(Math.random() * items.length)];
    // 用require动态引入图片
    this.setState({
      img_path: require(item.ItemImg).default,
      alt: item.ItemName
    });
  }

  render() {
    return (
      <div>
        <img 
          src={this.state.img_path} 
          onClick={this.getNew} 
          alt={this.state.alt} 
          width={150} 
        />
      </div>
    );
  }
}

export default MyImg;

这样修改后,点击图片应该就能正常切换显示不同的图片了!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:42:44