Bagaimana cara mereferensikan gambar lokal di Bereaksi?

166

Bagaimana saya bisa memuat gambar dari direktori lokal dan memasukkannya ke dalam reactjs img srctag?

Saya memiliki gambar yang disebut one.jpegdi dalam folder yang sama dengan komponen saya dan saya mencoba keduanya <img src="one.jpeg" />dan <img src={"one.jpeg"} />di dalam renderfungsi saya tetapi gambar tidak muncul. Juga, saya tidak memiliki akses ke webpack configfile karena proyek dibuat dengan create-react-apputil baris perintah resmi .

Pembaruan: Ini berfungsi jika saya pertama kali mengimpor gambar dengan import img from './one.jpeg'dan menggunakannya di dalam img src={img}, tetapi saya memiliki begitu banyak file gambar untuk diimpor dan oleh karena itu, saya ingin menggunakannya dalam bentuk img src={'image_name.jpeg'},.

Zip
sumber
2
Kemungkinan duplikat Bereaksi tidak akan memuat gambar lokal
Vanuan
Saya sebenarnya memiliki masalah yang sama, gambar saya telah diimpor dalam file index.jsx, saya memiliki loader di webpack, wajah kompilasi bekerja dengan baik, karena memang salinan gambar dibuat di server saya / publik / js folder dengan nomor acak, dan jalur yang benar untuk itu ada di bundler, tapi saya tidak bisa memvisualisasikan gambar. Ini juga aneh bahwa ini diproduksi di server / publik / js dan bukan server / publik / img seperti yang saya tulis di index.js
Carmine Tambascia

Jawaban:

303

Pertama-tama bungkus src di {}

Lalu jika menggunakan Webpack; Dari pada: <img src={"./logo.jpeg"} />

Anda mungkin perlu menggunakan:

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


Opsi lain adalah dengan mengimpor gambar terlebih dahulu seperti itu:

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

atau ...

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

lalu tancapkan ...

<img src={logo} />

Saya akan merekomendasikan opsi ini terutama jika Anda menggunakan kembali sumber gambar.

Apswak
sumber
13
Berhati-hatilah agar tidak lupa .pada awal url relatif. Seharusnya<img src={require('./one.jpeg')} />
Nuhman
1
Apakah ada dari metode ini yang mempengaruhi kinerja seperti memuat waktu gambar? Jika demikian, kinerja manakah yang lebih baik?
Inaam ur Rehman
1
@ انعامالرحمٰن - Beberapa komentar di sini stackoverflow.com/questions/31354559/... tetapi TL; DR tidak, tidak ada perbedaan kinerja.
Apswak
Berikut ini tidak ada fakta bahwa setidaknya dengan webpack 4, loader yang digunakan adalah url-loader, bukan file satu atau yang sebelumnya
Carmine Tambascia
64

Cara terbaik adalah mengimpor gambar terlebih dahulu dan kemudian menggunakannya.

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>
    );
  }
} 
Arslan shakoor
sumber
1
Mengapa ini cara terbaik?
Jason Leach
8
Ini adalah cara terbaik jika Anda perlu menggunakan kembali komponen yang sama, Anda dapat menggunakannya tanpa referensi jalur. Ini adalah latihan yang baik @JasonLeach
Arslan shakoor
Jason Leach itu cara yang lebih bersih
Arslan shakoor
8

Anda perlu membungkus jalur sumber gambar Anda di dalamnya {}

<img src={'path/to/one.jpeg'} />

Anda harus menggunakan requirejika menggunakanwebpack

<img src={require('path/to/one.jpeg')} />
Shubham Khatri
sumber
8

Di dalam folder publik buat folder aset dan letakkan jalur gambar yang sesuai.

<img className="img-fluid" 
     src={`${process.env.PUBLIC_URL}/assets/images/uc-white.png`} 
     alt="logo"/>
Harshvardhan Singh Baghel
sumber
Terima kasih, ini terbukti bermanfaat bagi saya dalam situasi di mana gambar mungkin ada atau tidak ada di folder karena mereka diimpor secara dinamis berdasarkan sumber yang ditampilkan.
Sébastien De Varennes
4

cara terbaik untuk mengimpor gambar adalah ...

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>
    );
  }
}
Abdul Moiz
sumber
1
Impor relatif di luar src / tidak didukung. Untuk melakukan ini, Anda harus menyimpan gambar Anda di src /, yang tidak disarankan
toing_toing
@toing_toing Mengapa Anda tidak merekomendasikan menyimpan gambar di src? Dokumentasi resmi memiliki contoh di mana ini terjadi: facebook.github.io/create-react-app/docs/…
roob
menambah ukuran bundel webpack dan waktu kompilasi, perlu mengkompilasi ulang setiap kali Anda mengubah aset dan menambah waktu pemuatan. Saya lebih suka meletakkannya di folder publik dan tautan oleh url.
toing_toing
4
@toing_toing Anda mengatakan Anda akan 'lebih suka ....' tetapi Anda tidak mengatakan bagaimana melakukannya.
Thomas Jay Rush
1

Jawaban saya pada dasarnya sangat mirip dengan Rubzen. Saya menggunakan gambar sebagai nilai objek, btw. Dua versi berfungsi untuk saya:

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

atau

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

Tanpa pembungkus - tapi itu aplikasi yang berbeda juga.

Saya telah memeriksa juga solusi "impor" dan dalam beberapa kasus berfungsi (apa yang tidak mengejutkan, yang diterapkan dalam pola App.js di Bereaksi), tetapi tidak dalam kasus seperti tambang di atas.

Kiszuriwalilibori
sumber
1

Anda memiliki dua cara untuk melakukannya.

Pertama

Impor gambar di atas kelas dan referensi di <img/>elemen Anda seperti ini

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

Kedua

Anda dapat langsung menentukan path gambar menggunakan require('../pathToImh/img')di <img/>elemen seperti ini

import React, { Component } from 'react'; 

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

Hadi Mir
sumber
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
sumber
0

Saya telah menggunakan cara ini, dan berhasil ... Saya harap Anda berguna.

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

 return(
 <div className="blockquote text-center">
            <img src={logofooter} width="100" height="80" />
 <div/>
);
Rubzen
sumber
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}/>
   );
  }
}

ekspor Gambar default

LOVENEET SINGH
sumber
0

Seperti beberapa disebutkan dalam komentar, Anda dapat meletakkan gambar di folder publik. Ini juga dijelaskan dalam dokumen Create-React-App: https://create-react-app.dev/docs/using-the-public-folder/

wededwiper
sumber
Sebenarnya tidak ada lebih banyak kode yang diperlukan daripada satu baris dalam dokumen<img src={process.env.PUBLIC_URL + '/img/logo.png'} />
dyedwiper
0

Saya menemukan cara lain untuk mengimplementasikan ini (ini adalah komponen fungsional):

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

Semoga ini bisa membantu!

Kai Sheng Tung
sumber