动态反应导入图像
React Dynamically Import Images
在我的 React 代码中,我想在我的文件夹中显示多张图片。我有大约 100 张图像,我不想在不同的导入语句中导入所有图像。我想用图像索引导入它们。以下是我的意思:
import LoadImages from './images/${index}.jpeg';
有没有像上面这样的导入语句?
这是一个包含两张图片的示例:
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张图片。近百张图片怎么办?此外,在图像组件的 src 部分,我无法将此结构用于 100 张图像。
你建议我做什么?
您可以将图像放在 public 文件夹或 s3 存储桶等中。
在“何时使用 public 文件夹”标题下的 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 同步加载它们。假设您在 webpack
配置中使用 file-loader
。
解决方案如下所示:
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} />
))
在我的 React 代码中,我想在我的文件夹中显示多张图片。我有大约 100 张图像,我不想在不同的导入语句中导入所有图像。我想用图像索引导入它们。以下是我的意思:
import LoadImages from './images/${index}.jpeg';
有没有像上面这样的导入语句?
这是一个包含两张图片的示例:
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张图片。近百张图片怎么办?此外,在图像组件的 src 部分,我无法将此结构用于 100 张图像。
你建议我做什么?
您可以将图像放在 public 文件夹或 s3 存储桶等中。
在“何时使用 public 文件夹”标题下的 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 同步加载它们。假设您在 webpack
配置中使用 file-loader
。
解决方案如下所示:
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} />
))