Як імпортувати зображення (.svg, .png) у компонент React


76

Я намагаюся імпортувати файл зображення в один із компонентів реакції. У мене налаштування проекту з веб-пакетом

Ось мій код компонента

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
Шадіде, ти спробував <img src = {require ('../../ assets / linux_logo.jpg')} />?
Naga Sai A

так, я спробував це. Знову без помилки в консолі, але я не бачу зображення
Шадід,

1
Вам слід створити веб-пакет і перевірити, де зберігаються зображення. Використовуйте цей шлях у img src.
віджайст

@vijayst Благослови вас, добрий сер .. Це спрацювало. :)
Шадід

Відповіді:


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 зображень?
Лео Гаспаріні

3
@LeoGasparrini - Я не впевнений, що розумію, про що ти просиш - ти повинен мати змогу імпортувати скільки завгодно, поки ти даси їм унікальні імена при імпорті, ні?
Alexander Nied

1
Я намагаюся використовувати той самий підхід, і Babel скаржиться, оскільки він не може зрозуміти, що таке png-файл. Як я можу дозволити Babel пропускати файли PNG із транпіляції?
Саніш Джозеф

Я раджу вам використовувати додаток create response. Такі проблеми вже попередньо вирішені з установкою. І вам не потрібно реінжинірингу процесу

можна повторно експортувати з index.ts і отримати доступ до кількох зображень, наприклад, "імпорт {image1, image2, image3} з './../images'" ??
ksh

14

Ви можете використовувати також вимагати, щоб зробити зображення, як

//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> 

На додаток до вищезазначеного, я спробував використовувати також, і це також працювало для мене. Я включив зображення до папки "Зображення" у каталозі src.

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

-1

Вирішено проблему при переміщенні папки із зображенням у папку src. Потім я звернувся до зображення (проект, створений через "create-response-app")
let image = document.createElement ("img"); image.src = require ('../ assets / police.png');


Може бути і так: імпортувати React, {Component} з 'response'; експортувати клас за замовчуванням Lesson3 розширює Component {render () {return (<image src = {require ('../ assets / police.png')} />); }}
Андре

-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"
  />
) )
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.