Как мне сослаться на локальное изображение в React?

168

Как я могу загрузить изображение из локального каталога и включить его в reactjs img srcтег?

У меня есть изображение, которое вызывается one.jpegв той же папке, что и мой компонент, и я попробовал и то, <img src="one.jpeg" />и другое <img src={"one.jpeg"} />в своей renderфункции, но изображение не отображается. Кроме того, у меня нет доступа к webpack configфайлу, так как проект создается с помощью официального create-react-appутилиты командной строки.

Обновление: Это работает , если я первый импортировать изображение с import img from './one.jpeg'и использовать его внутри img src={img}, но у меня есть так много файлов изображений для импорта и , следовательно, я хочу , чтобы использовать их в виде, img src={'image_name.jpeg'}.

застежка-молния
источник
Смотрите также stackoverflow.com/questions/37644265/...
Vanuan
На самом деле у меня похожая проблема, мое изображение было импортировано в файл index.jsx, у меня есть загрузчики в веб-пакете, компиляция лица работает нормально, так как действительно копия изображения была создана на моем сервере / public / js Папка со случайным числом, и правильный путь к нему находится в пакете, но я не могу визуализировать изображение. Также странно, что он был создан на сервере / public / js, а не на сервере / public / img, как я писал в index.js
Кармине Тамбаскиа

Ответы:

306

Прежде всего, заверните 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} />

Я бы порекомендовал этот вариант, особенно если вы повторно используете источник изображения.

Apswak
источник
13
Позаботьтесь, чтобы не забыть .в начале относительного URL. Должно быть<img src={require('./one.jpeg')} />
Нухман
1
Влияет ли какой-либо из этих методов на производительность, например, на время загрузки изображения? Если да, то какой из них лучше по производительности?
Инаам ур Рехман
1
@ انعامالرحمٰن - некоторые комментарии здесь stackoverflow.com/questions/31354559/… но TL; DR нет, никакой разницы в производительности.
Апсвак
Здесь отсутствует тот факт, что, по крайней мере, в веб-пакете 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
Арслан Шакур
Джейсон Лич - это чище
Арслан Шакур
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
увеличивает размер пакета веб-пакета и время компиляции, необходимо перекомпилировать каждый раз, когда вы меняете актив, и увеличивается время загрузки. Я предпочел бы положить его в общую папку и ссылку по URL.
toing_toing
4
@toing_toing Вы говорите, что "скорее ....", но вы не говорите, как это сделать.
Томас Джей Раш
2

У вас есть два способа сделать это.

Первый

Импортируйте изображение поверх класса, а затем ссылайтесь на него в вашем <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')в <img/>элементе , как это

import React, { Component } from 'react'; 

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

Хади Мир
источник
1

Мой ответ в основном очень похож на ответ Рубцена. Я использую изображение в качестве значения объекта, кстати. У меня работают две версии:

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

или

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

Без обертки - но это тоже другое приложение.

Я проверил также «импорт» решение, и в некоторых случаях оно работает (что неудивительно, что применяется в паттерне App.js в React), но не в том случае, как мое выше.

Kiszuriwalilibori
источник
1

Я нашел другой способ реализовать это (это функциональный компонент):

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

Надеюсь, поможет!

Кай Шенг Тунг
источник
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;
Emyboy
источник
0

Я использовал этот способ, и он работает ... Надеюсь, вам пригодится.

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

 return(
 <div className="blockquote text-center">
            <img src={logofooter} width="100" height="80" />
 <div/>
);
Rubzen
источник
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}/>
   );
  }
}

экспорт изображения по умолчанию

LOVENEET SINGH
источник
0

Как уже упоминалось в комментариях, вы можете поместить изображения в общую папку. Это также объясняется в документации Create-React-App: https://create-react-app.dev/docs/using-the-public-folder/

dyedwiper
источник
На самом деле не нужно больше кода, чем в одной строке документа<img src={process.env.PUBLIC_URL + '/img/logo.png'} />
dyedwiper