问题描述
在我的 React 代码中,我想在我的文件夹中显示多个图像。我有大约 100 张图像,我不想在不同的导入语句中导入所有图像。我想用图像的索引导入它们。以下是我的意思:
import LoadImages from './images/${index}.jpeg';
有没有像上面那样的import语句?
import React from 'react';
import './App.css';
import Image1 from './images/0.jpeg';
import Image2 from './images/1.jpeg';
const images = Array.from({ length: 2 },(_,i) => {
return (
<img
src={i === 0 ? Image1 : Image2}
alt={i.toString()}
key={i}
style={{ marginBottom: '3%',marginTop: '3%' }}
/>
);
});
export default function App() {
return <div className='App'>{images}</div>;
}
上面的代码只包含 2 张图片。我应该如何处理近 100 张图像?此外,在图像组件的 src 部分,我无法将这种结构用于 100 张图像。
你建议我做什么?
解决方法
您可以将图像放在 public 文件夹或 s3 存储桶等中。
在“何时使用公共文件夹”标题下的 CRA 文档中;如果“您有数以千计的图像并且需要动态引用它们的路径”,则建议使用它。
然后你可以做这样的事情;
new Array(15)
.fill(1)
.map((_,i) => ({
<img
src={"/public/images/" + i + ".jpeg" }
key={i}
className="img-fluid"
/>
}))
小注:Array(15).fill(1)
基本上意味着创建 15 个元素的数组,然后将 1 放入其中。由于我们无法在 jsx 中执行 for
循环,因此我们创建了一个包含 15 个(或您想要的数字)元素的数组并通过它们进行映射。
如果加载图像等资产,您可以通过 require 同步加载它们。假设您在 file-loader
配置中使用 webpack
。
解决方案如下:
const images = Array.from({ length: 2 },(_,i) => {
return (
<img
src={require(`./images/${i}`).default}
alt={i.toString()}
key={i}
style={{ marginBottom: '3%',marginTop: '3%' }}
/>
);
});
基于不知道名称的新请求的更新
如果不知道文件名,您可以通过 require.context
加载您需要的内容,如下所示:
const templates = require.context('./images',true,/\.(jpg|jpeg)$/);
const images = templates.keys().map((elem) => (
<img key={elem} src={templates(elem).default} />
))