如何在React组件中导入图像(.svg,.png)


76

我正在尝试在我的react组件之一中导入图像文件。我有Web Pack的项目设置

这是我的组件代码

import Diamond from '../../assets/linux_logo.jpg';

 export class ItemCols extends Component {
    render(){
        return (
            <div>
                <section className="one-fourth" id="html">
                    <img src={Diamond} />
                </section>
            </div>
        )
    } 
}

这是我的项目结构。

在此处输入图片说明

我已经通过以下方式设置了webpack.config.js文件

{
    test: /\.(jpg|png|svg)$/,
    loader: 'url-loader',
    options: {
      limit: 25000,
    },
},
{
    test: /\.(jpg|png|svg)$/,
    loader: 'file-loader',
    options: {
      name: '[path][name].[hash].[ext]',
    },
},

PS。我可以从任何其他远程源获取图像,但不能从本地保存图像。JavaScript控制台也没有给我任何错误。请任何帮助。我很新来做出反应,无法找到我做错了什么。


3
Shadid,您尝试过<img src = {require('../../ assets / linux_logo.jpg')} />吗?
Naga Sai A

是的,我尝试过。再次在控制台中没有错误,但我看不到任何图像
Shadid

1
您应该进行webpack构建并检查图像的存储位置。在img src中使用该路径。
vijayst

@vijayst祝福您,先生。:)
Shadid

Answers:


131

尝试使用

import mainLogo from'./logoWhite.png';

//then in the render function of Jsx insert the mainLogo variable

class NavBar extends Component {
  render() {
    return (
      <nav className="nav" style={nbStyle}>
        <div className="container">
          //right below here
          <img  src={mainLogo} style={nbStyle.logo} alt="fireSpot"/>
        </div>
      </nav>
    );
  }
}

10
如果要导入10张图像会怎样?
Leo Gasparrini

3
@LeoGasparrini-我不确定我是否理解您的要求-只要在导入时给它们指定唯一的名称,就应该可以导入任意数量的内容,对吗?
亚历山大·尼德

1
我正在尝试相同的方法,而Babel抱怨因为无法理解png文件是什么。如何让babel跳过转译的png文件?
Sanish Joseph

我建议您使用创建反应应用程序。此类问题已通过设置预先解决。而且您不需要重新设计流程

可以从index.ts重新导出并访问多个图像,例如“从'./../images'中导入{image1,image2,image3}“
ksh

14

您也可以使用require渲染图像,例如

//then in the render function of Jsx insert the mainLogo variable

class NavBar extends Component {
  render() {
    return (
      <nav className="nav" style={nbStyle}>
        <div className="container">
          //right below here
          <img src={require('./logoWhite.png')} style={nbStyle.logo} alt="fireSpot"/>
        </div>
      </nav>
    );
  }
}

7

如果图像在src / assets文件夹中,则可以require在require语句中使用正确的路径,

var Diamond = require('../../assets/linux_logo.jpg');

 export class ItemCols extends Component {
    render(){
        return (
            <div>
                <section className="one-fourth" id="html">
                    <img src={Diamond} />
                </section>
            </div>
        )
    } 
}

0
import React, {Component} from 'react';
import imagename from './imagename.png'; //image is in the current folder where the App.js exits


class App extends React. Component{
    constructor(props){
     super(props)
     this.state={
      imagesrc=imagename // as it is imported
     }
   }

   render(){
       return (

        <ImageClass 
        src={this.state.imagesrc}
        />
       );
   }
}

class ImageClass extends React.Component{
    render(){
        return (

            <img src={this.props.src} height='200px' width='100px' />
        );
    }
}

export default App;

0

在需要导入.png图像的地方,我也有类似的要求。我已将这些图像存储在公用文件夹中。因此,以下方法对我有用。

<img src={process.env.PUBLIC_URL + './Images/image1.png'} alt="Image1"></img> 

除了上述以外,我还尝试使用require,它也对我有用。我已经将图像包含在src目录的Images文件夹内。

<img src={require('./Images/image1.png')}  alt="Image1"/>

-1

解决了将图像移动到src文件夹中的文件夹时的问题。然后我转向图像(通过“ create-react-app”创建的项目),
让image = document.createElement(“ img”); image.src = require('../ assets / police.png');


可能是这样:从'react'导入React,{Component}; 导出默认类Lesson3扩展了组件{render(){return(<image src = {require('../ assets / police.png')} />); }
安德烈(Andre)'18年

-1

一种简单的方法是使用location.origin
,它将返回您的域,
例如
http:// localhost:8000
https://yourdomain.com

然后用一些线串起来...
享受...

<img src={ location.origin+"/images/robot.svg"} alt="robot"/>

更多图片?

var images =[
"img1.jpg",
"img2.png",
"img3.jpg",
]

images.map( (image,index) => (

  <img key={index} 
       src={ location.origin+"/images/"+image} 
       alt="robot"
  />
) )
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.