我正在为我的 React 项目使用 create-react-app 。它已经配置了 webpack 来导入图像。我希望将多个图像(例如 10 个)从图像文件夹导入到组件中。最简单的方法是添加多个导入语句,例如 -
import Img0 from '../images/0.png';
import Img1 from '../images/1.png';
import Img2 from '../images/2.png';
import Img3 from '../images/3.png';
import Img4 from '../images/4.png';
import Img5 from '../images/5.png';
import Img6 from '../images/6.png';
...
当我们有多个文件要导入时,上面的代码不是一个好的选择。有没有办法在循环中添加导入语句?我尝试添加 for 循环,但无法修改变量 Img0、Img1 等(使用 ES6 `` 不起作用,因为它将变量转换为字符串)
我认为也许更好的主意是为图像文件夹使用 index 文件。
假设你有这样的结构:
您需要将所有图像导入到您的 HomePage 组件中。 您可以轻松地在
images文件夹中创建
index.js
文件,使用 require 导出所有图像,如下所示:
export const Background = require('./bg/background.jpg');
export const First = require('./photos/first.jpg');
export const Second = require('./photos/second.jpg');
export const LinkedIn = require('./social/linkedin.png');
然后在您的组件上,您可以通过一次导入来导入所有这些。
import {
Background,
First,
Second,
LinkedIn
} from '../../assets/images'
希望有帮助! ;)
更新于2021年4月25日:
如果你想使用 ES6 命名导入:
图像/index.js:
import Background from './bg/background.jpg';
import First from './photos/first.jpg';
import Second from './photos/second.jpg';
import LinkedIn from './social/linkedin.png';
export {
Background,
First,
Second,
LinkedIn
};
减少名字重复
export { default as Background } from './bg/background.jpg';
export { default as First } from './photos/first.jpg';
export { default as Second } from './photos/second.jpg';
export { default as LinkedIn } from './social/linkedin.png';
图像文件夹
a.png
导入图像的组件
import a from "./a.png"; import b from "./b.png"; import c from "./c.png"; const images = { a, b, c } export default images;
render() 中的使用
import images from './images'; //Your images folder location
render(){ return( <img src={images.a} /> ) }
function importAll(r) {
return r.keys().map(r);
}
const images = importAll(require.context('./', false, /\.(png|jpe?g|svg)$/));
images
是Module的一个对象。您可以通过
images[index].default
访问文件路径
要调用组件中的图像,请执行以下操作:
src="images/imageName.format"
不要使用 src='../public'。它将显示错误。
React 会自动找到你提到的文件夹
export const file1 = require("./IconRed_100x100.png");
export const file2 = require("./IconSilver_100x100.png");
export const file3 = require("./IconWhite_100x100.png");
export const file4 = require("./IconBrown1_100x100.png");
export const file5 = require("./IconBrown2_100x100.png");
export const file6 = require("./IconGray_100x100.png");
export const file7 = require("./IconMetallic_100x100.png");
export const file8 = require("./IconMetallic_100x100.png");
export const file9 = require("./IconMetallic_100x100.png");
export const file10 = require("./IconMetallic_100x100.png");
...
import * as ALL from "../assets/png/icons";
const itemsToRender = [];
for (let x in ALL) {
console.log(x);
itemsToRender.push(
<div key={x} className="image-gallery-item">
<img src={ALL[x]}></img>
</div>
);
}
function ImageGallery() {
return (
<>
<div className="image-gallery">{itemsToRender}</div>
</>
);
}
export default ImageGallery;
// images.js
const IMAGES = {
apple: require('./apple.jpg').default,
cherry: require('./cherry.jpg').default
}
export default IMAGES
// App.js
import IMAGES from "./images"
// USAGE OPTION 1
const IMAGE = {...IMAGES}
<img src={IMAGE.apple} />
// USAGE OPTION 2
const { cherry } = IMAGES
<img src={cherry} />