ReactJS ve genel klasördeki görüntüler


94

ReactJS'de yeniyim ve görüntüleri bir bileşene aktarmak istiyorum. Bu görüntüler ortak klasörün içinde ve klasöre react bileşeninden nasıl erişeceğimi bilmiyorum.

Herhangi bir fikir ?

DÜZENLE

Bottom.js veya Header.js içine bir resim aktarmak istiyorum

Yapı klasörü:

görüntü açıklamasını buraya girin

Web paketi kullanmıyorum. Yapmalımıyım ?

Düzenle 2

Görüntüleri ve diğer varlıkları yüklemek için webpack kullanmak istiyorum. Yapılandırma klasörümde şu dosyalar var:

görüntü açıklamasını buraya girin

Görüntülerin yollarını nereye eklemem gerekiyor ve nasıl?

Teşekkürler


1
bu klasör neye açıktır? proje yapınız nedir? Görüntüleri web paketiyle birlikte mi topluyorsunuz yoksa bu hariç mi? etc etc etc bağlam bağlamı
Joel Harkes

@JoelHarkes düzenlendi.
Aceconhielo

paketlenmemiş gibi görünüyor. denedin src="/images/logofooter.png"mi :
Joel Harkes

Maalesef bu soruyla alakalı değil ama hangi simge temasını kullanıyorsun?
Nermin

Yanıtlar:


77

Kamusal alanda resimlere atıfta bulunmak için bunu nasıl doğrudan yapacağımı bildiğim iki yol var. Homam Bahrani'den biri yukarıdaki gibidir.

kullanma

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

Ve bu işe yaradığına göre gerçekten başka hiçbir şeye ihtiyacınız yok ama bu da işe yarıyor ...

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

1
Konsolda herhangi bir hata göstermiyor, ancak görüntü aktardığım gibi değil, varsayılan bir görüntü simgesi olarak görünüyor. Bahsettiğiniz her iki davayı da denedim. Lütfen bana yardım edin. Teşekkürler !
Prakhar Mittal

148

Bunun için herhangi bir web paketi yapılandırmasına ihtiyacınız yok ..

Bileşeninizde sadece görüntü yolunu verin. Varsayılan olarak react, genel dizinde olduğunu bilecektir.

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

2
Bu benim için çalıştı. Resimleri sadece genel dizine kopyaladım. React otomatik olarak yolu çözdü.
Vineeth Bhaskaran

2
Ve görüntüler ortak klasörün içindeki bir klasördeyse, onu bulmak için tepki verecek mi?
Yuval Levy

2
Evet @YuvalLevy.
Oliver Voutat

10

react belgeleri bunu belgelerde güzel bir şekilde açıklar process.env.PUBLIC_URL, ortak klasöre yerleştirilmiş görüntülerle kullanmanız gerekir . Daha fazla bilgi için buraya bakın

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

Evet, src dir hiyerarşisinin dışındaki dinamik görüntüler için. Logo veya arka plan gibi statik olanlara içe aktarma yöntemi ile ulaşılabilir.
Juan Lanus

1
ayrıca, bu, create react uygulamasıyla oluşturulan uygulamalar içindir
eballeste

1
Konsolda herhangi bir hata göstermiyor, ancak görüntü aktardığım gibi değil, varsayılan bir görüntü simgesi olarak görünüyor. Lütfen bana yardım edin.
Prakhar Mittal

4

1- Yapılandırmalar için web paketi kullanıyorsanız iyidir, ancak görüntü yolunu kullanabilirsiniz ve tepki, bunun genel dizinde olduğunu öğrenecektir.

<img src="/image.jpg">

2- React'te standart bir uygulama olan webpack kullanmak istiyorsanız. Bu kuralları webpack.config.dev.js dosyanızda kullanabilirsiniz.

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

daha sonra görüntü dosyasını react bileşenlerine aktarabilir ve kullanabilirsiniz.

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

<img src={image}/>

2

React'in SPA olduğunu biliyoruz. JSX'ten uygun HTML'ye genişletilerek her şey kök bileşenden işlenir.

Bu yüzden resimleri nerede kullanmak istediğiniz önemli değil. En iyi uygulama, mutlak bir yol kullanmaktır (halka referansla). Göreli yollar konusunda endişelenmeyin.

Sizin durumunuzda, bu her yerde çalışmalıdır:

"./images/logofooter.png"


1

Hayatınızı kolaylaştırmak için buradaki web paketini kullanmalısınız. Yapılandırmanıza aşağıdaki kuralı ekleyin:

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

Bundan sonra, görüntüleri basitçe react bileşenlerinize aktarabilirsiniz:

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

MyImage'ı aşağıdaki gibi kullanın:

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

veya görüntü, bileşenin yerel durumuna aktarılmışsa

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

Bir kaynağı içe aktarabilmek için web paketine ihtiyacınız olup olmadığından şüpheliyim.
Siya

@fshock, görevi tamamlamayı kolaylaştıracağını söyledim.
Umesh

@Umesh Bunu Webpack ile yapmayı tercih ediyorum. Yani yapılandırmaya kuralı eklemem gerektiğini söyledin ama hangi dosya? Path.js, polyfills.js, webpack.config.dev.js, webpack.config.prod.js ve webpackDevServer.config.js var. Yapısını hepinizin görebilmesi için soruyu düzenleyeceğim. Teşekkürler
Aceconhielo

@Aceconhielo, bunu webpack.config.dev.js ve webpack.config.prod.js'ye eklemelisiniz
Umesh

0

Bunu da kullanabilirsiniz .. "resminiz.jpg" nin ortak klasörünüzde olduğunu varsayarak çalışır.

<img src={'./yourimage.jpg'}/>
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.