ReactJS dan gambar di folder publik

94

Saya baru di ReactJS dan saya ingin mengimpor gambar dalam sebuah komponen. Gambar-gambar ini ada di dalam folder publik dan saya tidak tahu cara mengakses folder dari komponen react.

Ada ide?

EDIT

Saya ingin mengimpor gambar di dalam Bottom.js atau Header.js

Folder strukturnya adalah:

masukkan deskripsi gambar di sini

Saya tidak menggunakan webpack. Haruskah saya ?

Edit 2

Saya ingin menggunakan webpack untuk memuat gambar dan aset lainnya. Jadi di folder konfigurasi saya, saya memiliki file berikutnya:

masukkan deskripsi gambar di sini

Di mana saya perlu menambahkan jalur gambar dan bagaimana?

Terima kasih

Aceconhielo
sumber
1
folder ini publik untuk apa? apa struktur proyek Anda? Apakah Anda juga menggabungkan gambar dengan webpack atau ini dikecualikan? dll dll dll konteks konteks
Joel Harkes
@Joeles diedit.
Aceconhielo
sepertinya tidak dikemas. Sudahkah Anda mencoba src="/images/logofooter.png":?
Joel Harkes
Maaf, ini tidak relevan dengan pertanyaan, tetapi tema ikon apa yang Anda gunakan?
Nermin

Jawaban:

77

Untuk mereferensikan gambar di depan umum, ada dua cara yang saya tahu bagaimana melakukannya secara langsung. Salah satunya seperti di atas dari Homam Bahrani.

menggunakan

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

Dan karena ini berhasil, Anda benar-benar tidak memerlukan apa pun selain itu, ini juga berfungsi ...

    <img src={window.location.origin + '/yourPathHere.jpg'} />
Gerard
sumber
1
Ini tidak menunjukkan kesalahan apa pun di konsol tetapi gambar muncul sebagai ikon gambar default bukan yang telah saya impor. Saya telah mencoba kedua kasus yang Anda sebutkan. Tolong bantu saya. Terima kasih!
Prakhar Mittal
148

Anda tidak memerlukan konfigurasi webpack untuk ini ..

Dalam komponen Anda berikan saja jalur gambar. Secara default react akan tahu itu di direktori publik.

<img src="/image.jpg" alt="image" />
Bimal Grg
sumber
2
Ini berhasil untuk saya. Hanya saya yang menyalin gambar ke direktori publik. React secara otomatis menyelesaikan jalurnya.
Vineeth Bhaskaran
2
Dan jika gambar ada di beberapa folder di dalam folder publik, akan bereaksi tahu untuk menemukannya?
Retribusi Yuval
2
Ya @YuvalLevy.
Oliver Voutat
10

Dokumen react menjelaskan hal ini dengan baik dalam dokumentasi, Anda harus menggunakan process.env.PUBLIC_URLgambar yang ditempatkan di folder publik. Lihat di sini untuk info lebih lanjut

return <img src={process.env.PUBLIC_URL + '/img/logo.png'} />;
Homam Bahrani
sumber
Ya, untuk gambar dinamis di luar hierarki dir src. Yang statis, seperti logo atau latar belakang, dapat dicapai dengan metode impor.
Juan Lanus
1
juga, ini untuk aplikasi yang dibuat dengan aplikasi create react
eballeste
1
Ini tidak menunjukkan kesalahan apa pun di konsol tetapi gambar muncul sebagai ikon gambar default bukan yang telah saya impor. Tolong bantu saya.
Prakhar Mittal
4

1- Baik jika Anda menggunakan webpack untuk konfigurasi tetapi Anda cukup menggunakan jalur gambar dan bereaksi akan mengetahui bahwa itu ada di direktori publik.

<img src="/image.jpg">

2- Jika Anda ingin menggunakan webpack yang merupakan praktik standar di React. Anda dapat menggunakan aturan ini di file webpack.config.dev.js Anda.

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

kemudian Anda dapat mengimpor file gambar dalam komponen react dan menggunakannya.

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

<img src={image}/>
Hassan Ajaz
sumber
2

Kami tahu React is SPA. Semuanya dirender dari komponen root dengan memperluas ke HTML yang sesuai dari JSX.

Jadi tidak masalah di mana Anda ingin menggunakan gambar. Praktik terbaik adalah menggunakan jalur absolut (dengan mengacu pada publik). Jangan khawatir tentang jalur relatif.

Dalam kasus Anda, ini seharusnya berfungsi di mana saja:

"./images/logofooter.png"

Karthik Sagar
sumber
1

Anda harus menggunakan webpack di sini untuk membuat hidup Anda lebih mudah. Tambahkan aturan di bawah ini di konfigurasi Anda:

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

Setelah ini, Anda cukup mengimpor gambar ke dalam komponen react Anda:

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

Gunakan myImage seperti di bawah ini:

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

atau jika gambar diimpor ke kondisi lokal komponen

<div><img src={this.state.myImage}/></div> 
Umesh
sumber
Saya ragu apakah Anda memerlukan webpack untuk dapat mengimpor sumber daya.
Siya
@fshock, saya katakan itu akan membuatnya lebih mudah untuk menyelesaikan tugas.
Umesh
@Umesh Saya lebih suka melakukannya dengan Webpack. Jadi Anda mengatakan bahwa saya harus menambahkan aturan di konfigurasi tetapi file yang mana? Saya memiliki path.js, polyfills.js, webpack.config.dev.js, webpack.config.prod.js dan webpackDevServer.config.js. Saya akan mengedit pertanyaan agar Anda semua dapat melihat strukturnya. Terima kasih
Aceconhielo
@Aceconhielo, Anda harus memasukkannya ke dalam webpack.config.dev.js dan webpack.config.prod.js
Umesh
0

Anda juga bisa menggunakan ini .. ini berfungsi dengan asumsi 'gambaranda.jpg' ada di folder publik Anda.

<img src={'./yourimage.jpg'}/>
smoothVibes
sumber