在react中导入多个文件

Aro*_*mer 13 javascript ecmascript-6 reactjs

我正在为我的反应项目使用create-react-app.它已配置webpack以导入图像.我希望将多个图像(例如10个)从图像文件夹导入到组件中.最简单的方法是添加多个import语句,如 -

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';
...
Run Code Online (Sandbox Code Playgroud)

当我们要导入多个文件时,上面的代码不是一个好的选择.有没有办法在循环中添加import语句?我尝试添加for循环,但我无法修改变量Img0,Img1等(使用ES6``无效,因为它将变量转换为字符串)

Анн*_*нна 35

我认为也许更好的主意是为您的图像文件夹使用索引文件。

假设你有这样的结构:

初始文件夹结构,其中所有图像都位于资产/图像内的子文件夹中

并且您需要将所有图像导入HomePage组件。您可以轻松地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');
Run Code Online (Sandbox Code Playgroud)

然后在您的组件上,您可以通过一次导入来导入所有这些。

import {
  Background,
  First,
  Second,
  LinkedIn
} from '../../assets/images'
Run Code Online (Sandbox Code Playgroud)

这将是您的最终文件夹结构: 我们在资产/图像中有一个 index.js 的最终文件夹结构

希望能帮助到你!;)

25/04/2021 更新:

如果要使用 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
};
Run Code Online (Sandbox Code Playgroud)


cs9*_*s95 12

您不能使用单个import语句,但可以这样做:

function importAll(r) {
    let images = {};
    r.keys().map((item, index) => { images[item.replace('./', '')] = r(item); });
    return images;
}

const images = importAll(require.context('./images', false, '/\.png/'));

<img src={images['0.png']} />
Run Code Online (Sandbox Code Playgroud)

来源.

  • 有什么方法可以将此代码放入实用程序文件中并将路径作为参数传递,以避免必须在每个组件 .jsx 文件中编写此函数?我尝试了 `export default function importImages(imagesDirectory) { return importAll( require.context(imagesDirectory, false, /\.(png|jpe?g|svg)$/) ); }` 但这会抛出 `TypeError: __webpack_require__(...).context is not a function` 错误。 (2认同)

小智 8

我不确定这真的是一个好方法,但我也在寻找如何将多个图像导入到组件中。但是,我想像模块一样导入图像

图片文件夹

  • a.png
  • b.png
  • c.png
  • 索引.js

索引.js

import a from "./a.png";
import b from "./b.png";
import c from "./c.png";
const images = {
    a,
    b,
    c
}
export default images;
Run Code Online (Sandbox Code Playgroud)

导入图像的组件

import images from './images'; //Your images folder location
Run Code Online (Sandbox Code Playgroud)

在 render() 中的用法

render(){
    return(
         <img src={images.a} />
    )
}
Run Code Online (Sandbox Code Playgroud)


sae*_*azi 5

您可以通过此功能导入文件夹中的所有图像

function importAll(r) {
  return r.keys().map(r);
}

const images = importAll(require.context('./', false, /\.(png|jpe?g|svg)$/));
Run Code Online (Sandbox Code Playgroud)

images是 Module 的一个对象。您可以通过以下方式访问文件路径images[index].default