ReactJS и изображения в общей папке


94

Я новичок в ReactJS, и я хочу импортировать изображения в компонент. Эти изображения находятся внутри общей папки, и я не знаю, как получить доступ к папке из компонента реакции.

Любые идеи ?

РЕДАКТИРОВАТЬ

Я хочу импортировать изображение в Bottom.js или Header.js

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

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

Я не использую webpack. Нужно ли мне ?

Редактировать 2

Я хочу использовать веб-пакет для загрузки изображений и остальных ресурсов. Итак, в моей папке конфигурации у меня есть следующие файлы:

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

Куда мне нужно добавить пути к изображениям и как?

Благодарность


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

@JoelHarkes отредактировал.
Aceconhielo

вроде не упаковано. вы пробовали src="/images/logofooter.png":?
Joel

Извините, это не относится к вопросу, но какую тему значков вы используете?
Нермин

Ответы:


77

Чтобы ссылаться на изображения публично, я знаю два способа сделать это прямо. Один подобен приведенному выше из Хомама Бахрани.

с помощью

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

И поскольку это работает, вам действительно ничего не нужно, но это тоже работает ...

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

1
В консоли не отображается никаких ошибок, но изображение отображается как значок изображения по умолчанию, а не то, что я импортировал. Я пробовал оба упомянутых вами случая. Пожалуйста, помогите мне. Благодарность !
Prakhar Mittal

148

Для этого вам не нужна никакая конфигурация веб-пакета ..

В вашем компоненте просто укажите путь к изображению. По умолчанию response будет знать его в общедоступном каталоге.

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

2
Это сработало для меня. Только я скопировал изображения в публичный каталог. React автоматически разрешил путь.
Вайнит Bhaskaran

2
И если изображения находятся в какой-то папке внутри общей папки, отреагируют, узнают, чтобы найти?
Юваль Леви,

2
Да @YuvalLevy.
Оливер Воутат,

10

документация по реакции прекрасно объясняет это в документации, которую вы должны использовать process.env.PUBLIC_URLс изображениями, помещенными в общую папку. См. Здесь для получения дополнительной информации

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

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

1
также, это для приложений, созданных с помощью приложения
create react

1
В консоли не отображается никаких ошибок, но изображение отображается как значок изображения по умолчанию, а не то, что я импортировал. Пожалуйста, помогите мне.
Prakhar Mittal

4

1- Хорошо, если вы используете веб-пакет для конфигураций, но вы можете просто использовать путь к изображению, и реакция обнаружит, что он находится в общедоступном каталоге.

<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
          }
        }
      ]
    }
  ],
},

затем вы можете импортировать файл изображения в компоненты React и использовать его.

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

<img src={image}/>

2

Мы знаем, что React - это SPA. Все отображается из корневого компонента путем расширения до соответствующего HTML из JSX.

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

В вашем случае это должно работать везде:

"./images/logofooter.png"


1

Вы должны использовать здесь webpack, чтобы облегчить себе жизнь. Добавьте следующее правило в свою конфигурацию:

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> 

Я сомневаюсь, нужен ли вам веб-пакет для импорта ресурса.
Siya

@fshock, я сказал, это облегчит задачу.
Umesh

@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.