这就是我想要做的:
imageArray = ["../images/a.png", "../images/b.png"];
function renderImages(number){
const imageElements = [];
for(let i = 0; i < number; i++){
const imageSrc = imageArray[i];
imageElements.push(<img src={ require(imageSrc) } alt=""/>);
}
return imageElements;
}
代码工作正常,问题出在图像源上,我可以放一个静态图像源,它可以工作(我尝试过),但是当源是动态的(数据来自数组,而数组来自json)文件)不起作用。有什么解决办法吗?
谢谢!
编辑:
我得到的错误是:错误:找不到模块“。”。
这可能是一个webpack问题
解决方案
对于有相同问题的人,我可以通过以下链接来解决此问题:Dynamically import images from a directory using webpack
答案 0 :(得分:2)
尝试这种方式
Json文件data.json
{
imageArray : ["../images/a.png", "../images/b.png"]
}
像这样更改代码
const data = require('./data.json');
const imageArray = data.imageArray;
function renderImages(number){
const imageElements = [];
for(let i = 0; i < number; i++){
const imageSrc = imageArray[i];
imageElements.push(<img src={imageSrc} alt=""/>);
}
return imageElements;
}
答案 1 :(得分:2)
创建一个模块,将所有图像导出为图像列表
var cache = [];
function importAll (r) {
r.keys().forEach((key,index) => cache[index] = r(key));
}
importAll(// your json here);
export default cache;
在您的主模块中
import * as images from // whatever you name the module
var imageList = images.default
// Use imageList[I]
之所以会发生这种情况,是因为react使用webpack进行捆绑,并且每个映像都特定于新捆绑的服务器。
要以反应方式导入单个图像,请使用:
import image from //path to the image
PS:如有错别字表示抱歉。我正在用手机输入答案。
答案 2 :(得分:2)
我不确定您的项目环境是什么,所以我会回答,就好像您使用的是标准MERN stack一样,尽管它们的核心要点仍然不正确。
首先,您尝试使用像../images/a.png
这样的绝对路径,不建议这样做。
您应该为应用程序设置一个static
文件夹,然后将文件放入其中。之后,您可以setup serving static files,然后开始使用诸如/images/abc.png
之类的相对URL。
这样一来,您就不必使用require
来获取它们,而只需使用字符串作为相对URL,服务器将负责其余的工作。
答案 3 :(得分:-1)
图像源在js代码生效之前已解决。 您必须静态地写入图像位置。
function icon() {
return require('../images/a.png');
}
in jsx -
<Image source={icon()} />