ReactJS中无法在innerHTML中使用导入的图片组件问题咨询
解决动态创建img时图片显示为[object Object]的问题
嘿,我来帮你搞定这个问题!你遇到的核心原因是:在Webpack、Vite这类现代前端构建工具里,用import导入图片文件时,得到的prevIcon并不是直接的图片URL字符串,而是一个包含图片处理后信息的对象(通常带有src属性,指向最终编译后的图片路径)。你直接把这个对象拼接到字符串里,JS就会把它转成[object Object],自然加载不出图片啦。
给你两种简单的解决方法:
方法一:直接使用导入对象的src属性
修改你的字符串拼接逻辑,直接取prevIcon.src(这才是真正能访问的图片路径):
import prevIcon from './images/prev_icon.svg'; let newNode = document.createElement('div'); // 用模板字符串更清晰,也能避免引号问题 newNode.innerHTML = `<img src="${prevIcon.src}" width="30px" height="30px" />`;
如果习惯用普通字符串拼接,也可以这么写:
newNode.innerHTML = '<img src="' + prevIcon.src + '" width="30px" height="30px" />';
(注意要给路径加双引号,避免路径里有特殊字符时出问题)
方法二:直接创建img元素(更推荐)
比起用innerHTML拼接字符串,直接创建DOM元素的方式更直观,也不容易出错:
import prevIcon from './images/prev_icon.svg'; let newNode = document.createElement('div'); // 创建img元素并设置属性 const imgElement = document.createElement('img'); imgElement.src = prevIcon.src; imgElement.width = 30; imgElement.height = 30; // 把img加到div里 newNode.appendChild(imgElement);
另外补充一句:如果你的构建工具配置比较特殊(比如把SVG当作纯静态资源处理),有时候导入的prevIcon本身就是字符串URL,这时候直接用prevIcon代替prevIcon.src就行,但大部分现代项目里还是用对象形式,所以优先用上面的方法~
内容的提问来源于stack exchange,提问作者Ayan
相关产品推荐
相关产品推荐

