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


167

Як я можу завантажити зображення з локального каталогу та включити його в 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'}.




У мене насправді є подібна проблема, моє зображення імпортується у файл index.jsx, у мене завантажувачі в webpack, обличчя компіляції працює нормально, оскільки дійсно копія зображення створена на моєму сервері / public / js папку зі випадковим номером і правильний шлях до неї знаходиться в пакеті, але я не можу візуалізувати зображення. Також дивно, що його виробляли на сервері / public / js, а не на сервері / public / img, як я писав у index.js
Carmine Tambascia

Відповіді:


305

Перш за все загорніть src {}

Тоді якщо ви використовуєте Webpack; Замість: <img src={"./logo.jpeg"} />

Можливо, вам потрібно буде використовувати:

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


Іншим варіантом буде спочатку імпортувати зображення як таке:

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

або ...

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

потім підключіть його ...

<img src={logo} />

Я рекомендую цей варіант, особливо якщо ви повторно використовуєте джерело зображення.


13
Слідкуйте за тим, щоб не забути .на початку відносної URL-адреси. Має бути<img src={require('./one.jpeg')} />
Нуман

1
Чи впливає будь-який із цих методів на продуктивність, наприклад, час завантаження зображення? Якщо так, то який з них краще, ніж продуктивність?
Інаам ур Рехман

1
@ انعامالرحمٰن - Деякі коментарі тут stackoverflow.com/questions/31354559/…, але TL; DR - ні, різниці в продуктивності немає.
Апсвак

Тут не вистачає факту, що принаймні за допомогою webpack 4 завантажувач використовується url-завантажувач замість файлу один або попередній
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
Арслан shakoor

Джейсон Ліч - це чистіший спосіб
Арслан shakoor

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

Дякую, це виявилося корисним для мене, коли зображення в папці можуть бути або не існувати, оскільки вони динамічно імпортуються на основі показаного ресурсу.
Sébastien De Varennes

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

Моя відповідь в основному дуже схожа на відповідь Рубцена. Я використовую зображення як значення об'єкта, btw. Для мене працюють дві версії:

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

або

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

Без обгортки - але це теж інше застосування.

Я перевірив також "імпортне" рішення, і в деяких випадках воно працює (що не дивно, що застосовується в шаблоні App.js в React), але не у випадку, як у мене вище.


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;

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

Як дехто згадував у коментарях, зображення можна помістити в загальнодоступну папку. Це також пояснено в документах Create-React-App: https://create-react-app.dev/docs/using-the-public-folder/


Насправді не потрібно більше коду, ніж один рядок у документах<img src={process.env.PUBLIC_URL + '/img/logo.png'} />
барвник
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.