ReactJS та зображення у загальній папці


94

Я новий у ReactJS, і я хочу імпортувати зображення в компонент. Ці зображення знаходяться всередині загальної папки, і я не знаю, як отримати доступ до папки з компонента response.

Будь-які ідеї?

РЕДАГУВАТИ

Я хочу імпортувати зображення всередині Bottom.js або Header.js

Папка структури:

введіть тут опис зображення

Я не використовую webpack. Чи я повинен ?

Редагувати 2

Я хочу використовувати webpack для завантаження зображень та решти ресурсів. Отже, у моїй конфігураційній папці у мене є наступні файли:

введіть тут опис зображення

Де потрібно додати шляхи до зображень і як?

Дякую


1
ця папка є загальнодоступною для чого? яка ваша структура проекту? Ви також поєднуєте зображення з веб-пакетом або це виключено? тощо тощо тощо контекст контексту
Джоель Харкс

@JoelHarkes відредаговано.
Aceconhielo

здається, це не упаковано. ви пробували src="/images/logofooter.png":?
Джоел Харкс,

На жаль, це не стосується питання, але яку тему значків ви використовуєте?
Нермін

Відповіді:


78

Щоб зробити посилання на зображення в громадських місцях, я знаю, як це зробити прямо вперед. Один - як у Гомама Бахрані.

використання

    <img src={process.env.PUBLIC_URL + '/yourPathHere.jpg'} /> 

І оскільки це працює, то вам справді нічого іншого не потрібно, але, це теж працює ...

    <img src={window.location.origin + '/yourPathHere.jpg'} />

1
У консолі не відображається помилка, але зображення відображається як піктограма зображення за замовчуванням, а не те, що я імпортував. Я судив обидва випадки, про які ви згадали. Будь ласка, допоможіть мені. Дякую !
Прахар Міттал

148

Для цього вам не потрібна будь-яка конфігурація веб-пакета ..

У вашому компоненті просто вкажіть шлях до зображення. За замовчуванням реакція буде знати її у відкритому каталозі.

<img src="/image.jpg" alt="image" />

2
Це спрацювало для мене. Лише я скопіював зображення в загальнодоступний каталог. Реакт автоматично вирішив шлях.
Vineeth Bhaskaran

2
І якщо зображення знаходяться в якійсь папці всередині загальної папки, зреагуєте знати, щоб її знайти?
Юваль Леві

2
Так @YuvalLevy.
Олівер Вутат,

10

Документи для реакції це добре пояснюють у документації, ви повинні використовувати process.env.PUBLIC_URLіз зображеннями, розміщеними у загальній папці. Дивіться тут для отримання додаткової інформації

return <img src={process.env.PUBLIC_URL + '/img/logo.png'} />;

Так, для динамічних зображень поза ієрархією src dir. Статичні, такі як логотип або фон, можна отримати за допомогою методу імпорту.
Хуан Ланус,

1
також це для додатків, побудованих за допомогою програми
create response

1
У консолі не відображається помилка, але зображення відображається як піктограма зображення за замовчуванням, а не те, що я імпортував. Будь ласка, допоможіть мені.
Прахар Міттал

4

1- Добре, якщо ви використовуєте webpack для конфігурацій, але ви можете просто використати шлях до зображення і реагуватимете, з’ясуєте, що він знаходиться у загальнодоступному каталозі.

<img src="/image.jpg">

2- Якщо ви хочете використовувати webpack, що є стандартною практикою в React. Ви можете використовувати ці правила у своєму файлі webpack.config.dev.js.

module: {
  rules: [
    {
      test: /\.(jpe?g|gif|png|svg)$/i,
      use: [
        {
          loader: 'url-loader',
          options: {
            limit: 10000
          }
        }
      ]
    }
  ],
},

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

import image from '../../public/images/logofooter.png'

<img src={image}/>

2

Ми знаємо, що React - це SPA. Все відображається з кореневого компонента шляхом розгортання до відповідного HTML з JSX.

Тому не має значення, де ви хочете використовувати зображення. Найкраща практика - використовувати абсолютний шлях (з посиланням на загальнодоступний). Не турбуйтеся про відносні шляхи.

У вашому випадку це повинно працювати скрізь:

"./images/logofooter.png"


1

Вам слід використовувати веб-пакет тут, щоб полегшити своє життя. Додайте в конфігурацію правило нижче:

const srcPath = path.join(__dirname, '..', 'publicfolder')

const rules = []

const includePaths = [
  srcPath
]
    // handle images
    rules.push({
      test: /\.(png|gif|jpe?g|svg|ico)$/,
      include: includePaths,
      use: [{
        loader: 'file-loader',
        options: {
          name: 'images/[name]-[hash].[ext]'
        }
      }

Після цього ви можете просто імпортувати зображення у свої реакційні компоненти:

import myImage from 'publicfolder/images/Image1.png'

Використовуйте myImage, як показано нижче:

<div><img src={myImage}/></div>

або якщо зображення імпортовано в локальний стан компонента

<div><img src={this.state.myImage}/></div> 

Сумніваюсь, чи потрібен веб-пакет для імпорту ресурсу.
Сія

@fshock, я сказав, що це полегшить виконання завдання.
Умеш,

@Umesh Я вважаю за краще робити це за допомогою Webpack. Отже, ви сказали, що я повинен додати правило в конфігурі, але який файл? У мене є path.js, polyfills.js, webpack.config.dev.js, webpack.config.prod.js та webpackDevServer.config.js. Я збираюся відредагувати питання, щоб усі ви бачили структуру. Дякую
Aceconhielo

@Aceconhielo, ти повинен включити його в webpack.config.dev.js та webpack.config.prod.js
Умеш,

0

Ви також можете використовувати це .. це працює, припускаючи, що 'yourimage.jpg' знаходиться у вашій загальній папці.

<img src={'./yourimage.jpg'}/>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.