如何在React中引用本地图像?


166

如何从本地目录加载图像并将其包含在reactjs img src标记中?

我有一个名为图像one.jpeg相同的文件夹我的组件里面,我都尝试<img src="one.jpeg" /><img src={"one.jpeg"} />我的内部render功能,但图像显示不出来。另外,webpack config由于该项目是使用官方create-react-app命令行util 创建的,因此我无权访问文件。

更新:如果我首先导入图像import img from './one.jpeg'并在内部使用它img src={img},则此方法有效,但是我要导入的图像文件太多,因此,我想以形式使用它们img src={'image_name.jpeg'}




我实际上有一个类似的问题,我的图像已导入到index.jsx文件中,webpack中有加载程序,编译界面工作正常,因为确实在我的服务器/ public / js中创建了该图像的副本文件夹中有一个随机数,并且正确的路径在捆扎机中,但是我无法看到图像。同样奇怪的是,它是在我写到index.js中时在server / public / js中生成的,而不是在server / public / img中生成的
Carmine Tambascia

Answers:


302

首先将src包装在 {}

然后,如果使用Webpack;代替: <img src={"./logo.jpeg"} />

您可能需要使用require:

<img src={require('./logo.jpeg')} />


另一个选择是先导入图像,如下所示:

import logo from './logo.jpeg'; // with import

要么 ...

const logo = require('./logo.jpeg); // with require

然后插入...

<img src={logo} />

我建议您使用此选项,尤其是在您重新使用图像源的情况下。


13
请注意不要忘记.相对网址开头的。应该是<img src={require('./one.jpeg')} />
Nuhman '18

1
这些方法是否会影响图像加载时间等性能?如果是这样,哪个性能更好?
Inaam ur Rehman

1
@ انعامالرحمٰن-这里的一些评论stackoverflow.com/questions/31354559/…但是TL; DR不是,没有性能差异。
Apswak

这里缺少这样一个事实,至少在webpack 4中,要使用的加载程序是url-loader而不是一个或之前的文件
Carmine Tambascia

64

最好的方法是先导入图像,然后再使用它。

import React, { Component } from 'react';
import logo from '../logo.svg';
export default class Header extends Component {
  render() {
    return (
      <div className="row">
        <div className="logo">
          <img src={logo} width="100" height="50" />
        </div>
      </div>
    );
  }
} 

1
为什么是最好的方法?
杰森·里奇

8
如果需要在同一组件中重用,这是最好的方法,可以在没有路径引用的情况下使用它。这是一个好习惯@JasonLeach
Arslan shakoor

杰森·利奇(Jason Leach),这是一种更清洁的方式
阿斯兰·莎可

8

您需要在其中包装图像源路径 {}

<img src={'path/to/one.jpeg'} />

require如果使用,则需要使用webpack

<img src={require('path/to/one.jpeg')} />

8

内部公共文件夹中创建的资产文件夹,将映像路径相应。

<img className="img-fluid" 
     src={`${process.env.PUBLIC_URL}/assets/images/uc-white.png`} 
     alt="logo"/>

谢谢您,这在文件夹中可能存在或可能不存在图像的情况下对我证明很有用,因为图像是根据显示的资源动态导入的。
塞巴斯蒂安·德瓦雷讷

4

导入图像的最佳方法是...

import React, { Component } from 'react';

// image import
import CartIcon from '../images/CartIcon.png';

 class App extends Component {
  render() {
    return (
     <div>
         //Call image in source like this
          <img src={CartIcon}/>
     </div>
    );
  }
}

1
不支持src /以外的相对导入。为此,您必须将图像保留在src /中,这是不推荐的
toing_toing

@toing_toing为什么不建议您将图像保留在src中?官方文档中有这种情况的示例:facebook.github.io/create-react-app/docs/…–
roob

会增加webpack捆绑包的大小和编译时间,每次更改资产和增加加载时间时都需要重新编译。我宁愿将其放在公用文件夹中并按url进行链接。
toing_toing

4
@toing_toing您说您会“相当...”,但您没有说如何做。
Thomas Jay Rush

1

我的回答基本上与鲁宾的回答非常相似。我使用图像作为对象值,顺便说一句。有两个版本适用于我:

{
"name": "Silver Card",
"logo": require('./golden-card.png'),

要么

const goldenCard = require('./golden-card.png');
{ "name": "Silver Card",
"logo": goldenCard,

没有包装器-但这也是不同的应用程序。

我也检查了“导入”解决方案,并且在少数情况下它可以工作(这并不奇怪,这在React中的模式App.js中应用了),但是在上面的情况下却没有。


1

您有两种方法可以做到这一点。

第一

将图像导入类的顶部,然后<img/>像这样在您的元素中引用它

import React, { Component } from 'react';
import myImg from '../path/myImg.svg';

export default class HelloImage extends Component {
  render() {
    return <img src={myImg} width="100" height="50" /> 
  }
} 

第二

您可以像这样使用require('../pathToImh/img')in <img/>元素直接指定图像路径

import React, { Component } from 'react'; 

export default class HelloImage extends Component {
  render() {
    return <img src={require(../path/myImg.svg)} width="100" height="50" /> 
  }
}


0
import image from './img/one.jpg';

class Icons extends React.Component{
    render(){
      return(
        <img className='profile-image' alt='icon' src={image}/>
    );
    }
}
export default Icons;

0

我已经使用过这种方式,并且可以正常工作...希望对您有用。

const logofooter = require('../../project-files/images/logo.png');

 return(
 <div className="blockquote text-center">
            <img src={logofooter} width="100" height="80" />
 <div/>
);

0
import React from "react";   
import image from './img/one.jpg';

class Image extends React.Component{
  render(){
    return(
      <img className='profile-image' alt='icon' src={image}/>
   );
  }
}

导出默认图像



0

我找到了另一种方法来实现这一点(这是一个功能组件):

const Image = ({icon}) => {
   const Img = require(`./path_to_your_file/${icon}.svg`).ReactComponent;
   return <Img />
}

希望能帮助到你!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.