React'teki yerel bir görüntüye nasıl başvurabilirim?


167

Resmi yerel dizinden nasıl yükleyebilir ve reactjs img srcetikete ekleyebilirim ?

Aradım bir resim one.jpegbenim bileşeni olarak aynı klasörün içine de ben de denedim <img src="one.jpeg" />ve <img src={"one.jpeg"} />benim iç renderişlevi ancak resim görünmüyor. Ayrıca, webpack configproje resmi create-react-appkomut satırı util ile oluşturulduğundan dosyaya erişimim yok .

Güncelleme: Bu, görüntüyü ilk import img from './one.jpeg'olarak içeri alıp içeride kullanırsam çalışır img src={img}, ancak içe aktarılacak çok fazla görüntü dosyam var ve bu nedenle bunları formda kullanmak istiyorum img src={'image_name.jpeg'}.




Aslında benzer bir sorun var, benim görüntü index.jsx dosyaya aktarıldı, webpack yükleyiciler var, derleme yüz iyi çalışıyor, gerçekten görüntünün bir kopyası benim sunucu / kamu / js oluşturulan rasgele bir sayı içeren klasör ve doğru yol paketleyicide, ancak görüntüyü görselleştiremiyorum. Onun da garip onun sunucu / kamu / js üretildi ve sunucu / kamu / img değil index.js içine yazdı gibi
Carmine Tambascia

Yanıtlar:


305

Her şeyden önce src'yi {}

Sonra Webpack kullanıyorsanız; Onun yerine: <img src={"./logo.jpeg"} />

Kullanmanız gerekebilir gerekebilir:

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


Başka bir seçenek, önce görüntüyü şu şekilde içe aktarmak olacaktır:

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

veya ...

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

sonra takın ...

<img src={logo} />

Özellikle görüntü kaynağını yeniden kullanıyorsanız bu seçeneği öneririm.


13
.Göreli URL'nin başında unutmamaya dikkat edin . Olmalı<img src={require('./one.jpeg')} />
Nuhman

1
Bu yöntemlerden herhangi biri görüntünün yüklenme süresi gibi performansı etkiler mi? Eğer öyleyse, hangisi performans açısından daha iyidir?
Inaam ur Rehman

1
@ انعامالرحمٰن - Burada bazı yorumlar stackoverflow.com/questions/31354559/… ama TL; DR hayır, performans farkı yok.
Apswak

En azından webpack 4 ile, kullanılacak yükleyicinin bir veya önceki dosya yerine url-loader olduğu gerçeği eksik
Carmine Tambascia

64

En iyi yol önce görüntüyü içe aktarmak ve sonra kullanmaktır.

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
Neden en iyi yol bu?
Jason Leach

8
Aynı bileşende yeniden kullanmanız gerekiyorsa, yol başvurusu olmadan kullanabilirsiniz. @JasonLeach
Arslan shakoor

Jason Leach daha temiz bir yol
Arslan shakoor

8

Görüntü kaynak yolunu içine sarmanız gerekiyor {}

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

Sen kullanımına gerek requirekullanılıyorsawebpack

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

8

Ortak klasörün içinde bir varlık klasörü oluşturun ve buna göre görüntü yolunu yerleştirin.

<img className="img-fluid" 
     src={`${process.env.PUBLIC_URL}/assets/images/uc-white.png`} 
     alt="logo"/>

Teşekkür ederim, bu, gösterilen kaynağa göre dinamik olarak içe aktarıldıklarından, görüntülerin klasörde bulunabileceği veya bulunmayabileceği bir durumda benim için yararlı oldu.
Sébastien De Varennes

4

görüntüyü içe aktarmanın en iyi yolu ...

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 / dışındaki göreli ithalatlar desteklenmez. Bunu yapmak için resimlerinizi src / konumunda tutmanız tavsiye edilmez
toing_toing

@toing_toing Resimleri neden src içinde tutmanızı önermiyorsunuz? Resmi belgelerde bunun geçerli olduğu örnekler vardır: facebook.github.io/create-react-app/docs/…
roob

web paketinin boyutunu ve derleme süresini artırır, bir varlığı her değiştirdiğinizde yeniden derlemeniz ve yükleme süresini artırır. Ortak klasöre koymak ve url ile bağlantı tercih ederim.
toing_toing

4
@toing_toing 'tercih edersiniz' diyorsunuz ama bunu nasıl yapacağınızı söylemiyorsunuz.
Thomas Jay Rush

2

Bunu yapmanın iki yolu var.

İlk

Sınıfın üstündeki Görüntü alma ve ardından ona gönderimde <img/>böyle elemanın

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

İkinci

Doğrudan kullanarak görüntü yolunu belirtebilirsiniz require('../pathToImh/img')içinde <img/>böyle elemanın

import React, { Component } from 'react'; 

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


1

Cevabım temel olarak Rubzen'e çok benziyor. Resmi btw nesne değeri olarak kullanıyorum. İki versiyon benim için çalışıyor:

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

veya

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

Paketleyici olmadan - ama bu da farklı bir uygulamadır.

Ben de "ithalat" çözüm kontrol ve birkaç durumda çalışır (ne şaşırtıcı, React desen App.js uygulanan), ama yukarıdaki benim gibi değil.


1

Bunu uygulamak için başka bir yol buldum (bu fonksiyonel bir bileşendir):

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

Umarım yardımcı olur!


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

Bu şekilde kullandım ve işe yarıyor ... Umarım faydalı olur.

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}/>
   );
  }
}

varsayılan Resmi dışa aktar


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.