ReactJS i obrazy w folderze publicznym


94

Jestem nowy w ReactJS i chcę importować obrazy w komponencie. Te obrazy znajdują się w folderze publicznym i nie wiem, jak uzyskać dostęp do folderu z komponentu reagowania.

Jakieś pomysły ?

EDYTOWAĆ

Chcę zaimportować obraz do pliku Bottom.js lub Header.js

Folder struktury to:

wprowadź opis obrazu tutaj

Nie używam webpacka. Czy powinienem ?

Edytuj 2

Chcę używać pakietu internetowego do ładowania obrazów i pozostałych zasobów. Więc w moim folderze konfiguracyjnym mam następne pliki:

wprowadź opis obrazu tutaj

Gdzie muszę dodać ścieżki obrazów i jak?

Dzięki


1
do czego ten folder jest publiczny? jaka jest struktura twojego projektu? Czy łączysz obrazy również z pakietem internetowym, czy jest to wykluczone? etc etc etc etc context context
Joel Harkes

Edytowano @JoelHarkes.
Aceconhielo

wygląda na to, że nie jest zapakowany. czy próbowałeś src="/images/logofooter.png":?
Joel Harkes,

Przepraszam, to nie dotyczy pytania, ale jakiego motywu ikon używasz?
Nermin

Odpowiedzi:


77

Aby odnieść się do obrazów w miejscach publicznych, wiem, jak to zrobić na dwa sposoby. Jeden jak wyżej od Homama Bahrani.

za pomocą

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

A ponieważ to działa, naprawdę nie potrzebujesz niczego innego, ale działa również ...

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

1
Nie pokazuje żadnego błędu w konsoli, ale obraz pojawia się jako domyślna ikona obrazu, a nie to, co zaimportowałem. Wypróbowałem oba przypadki, o których wspomniałeś. Proszę pomóż mi. Dzięki !
Prakhar Mittal

148

Nie potrzebujesz do tego żadnej konfiguracji pakietu internetowego.

W swoim komponencie po prostu podaj ścieżkę obrazu. Domyślnie zareaguje, będzie wiedział, że jest w katalogu publicznym.

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

2
To zadziałało dla mnie. Tylko ja skopiowałem obrazy do katalogu publicznego.React automatycznie rozwiązał ścieżkę.
Vineeth Bhaskaran

2
A jeśli obrazy znajdują się w jakimś folderze w folderze publicznym, czy zareagujesz, aby je znaleźć?
Yuval Levy

2
Tak @YuvalLevy.
Oliver Voutat

10

React docs ładnie to wyjaśniają w dokumentacji, musisz używać process.env.PUBLIC_URLz obrazami umieszczonymi w folderze publicznym. Więcej informacji znajdziesz tutaj

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

Tak, dla dynamicznych obrazów poza hierarchią src dir. Statyczne, takie jak logo lub tło, można uzyskać za pomocą metody importu.
Juan Lanus

1
dotyczy to również aplikacji utworzonych za pomocą aplikacji create
respond

1
Nie pokazuje żadnego błędu w konsoli, ale obraz pojawia się jako domyślna ikona obrazu, a nie to, co zaimportowałem. Proszę pomóż mi.
Prakhar Mittal

4

1- Dobrze, jeśli używasz webpacka do konfiguracji, ale możesz po prostu użyć ścieżki obrazu i zareagujesz, że dowiesz się, że jest w katalogu publicznym.

<img src="/image.jpg">

2- Jeśli chcesz używać webpacka, co jest standardową praktyką w React. Możesz użyć tych reguł w swoim pliku webpack.config.dev.js.

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

następnie możesz zaimportować plik obrazu w komponentach React i używać go.

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

<img src={image}/>

2

Wiemy, że React to SPA. Wszystko jest renderowane z komponentu głównego poprzez rozwinięcie do odpowiedniego kodu HTML z JSX.

Nie ma więc znaczenia, gdzie chcesz używać obrazów. Najlepszą praktyką jest użycie ścieżki bezwzględnej (w odniesieniu do publicznej). Nie martw się o ścieżki względne.

W twoim przypadku powinno to działać wszędzie:

"./images/logofooter.png"


1

Powinieneś użyć tutaj pakietu webpack, aby ułatwić sobie życie. Dodaj poniższą regułę do swojej konfiguracji:

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

Następnie możesz po prostu zaimportować obrazy do komponentów React:

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

Użyj myImage jak poniżej:

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

lub jeśli obraz jest importowany do lokalnego stanu komponentu

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

Wątpię, czy potrzebujesz webpacka, aby móc importować zasoby.
Siya

@fshock, powiedziałem, że to ułatwi wykonanie zadania.
Umesh

@Umesh Wolę to robić z Webpack. Więc powiedziałeś, że muszę dodać regułę w konfiguracji, ale który plik? Mam path.js, polyfills.js, webpack.config.dev.js, webpack.config.prod.js i webpackDevServer.config.js. Zamierzam edytować pytanie, aby wszyscy mogli zobaczyć strukturę. Dzięki
Aceconhielo

@ Aceconhielo, powinieneś umieścić go w plikach webpack.config.dev.js i webpack.config.prod.js
Umesh

0

Możesz również użyć tego ... to działa, zakładając, że „yourimage.jpg” znajduje się w folderze publicznym.

<img src={'./yourimage.jpg'}/>
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.