Come posso fare riferimento a un'immagine locale in React?


167

Come posso caricare un'immagine dalla directory locale e includerla nel reactjs img srctag?

Ho un'immagine chiamata one.jpegall'interno della stessa cartella del mio componente e ho provato entrambi <img src="one.jpeg" />e <img src={"one.jpeg"} />all'interno della mia renderfunzione ma l'immagine non viene visualizzata. Inoltre, non ho accesso al webpack configfile poiché il progetto è stato creato con l' create-react-apputilità ufficiale della riga di comando.

Aggiornamento: Funziona se prima importa l'immagine import img from './one.jpeg'e la utilizzo all'interno img src={img}, ma ho così tanti file di immagini da importare e, quindi, voglio usarli nel modulo img src={'image_name.jpeg'},.




In realtà ho un problema simile, la mia immagine è stata importata nel file index.jsx, ho i caricatori nel webpack, la faccia di compilazione funziona bene, poiché in effetti una copia dell'immagine è stata creata nel mio server / public / js cartella con un numero casuale e il percorso corretto è nel bundler, ma non riesco a visualizzare l'immagine. È anche strano che sia stato prodotto nel server / public / js e non in server / public / img come ho scritto in index.js
Carmine Tambascia il

Risposte:


305

Prima di tutto avvolgi l'src {}

Quindi se si utilizza Webpack; Invece di: <img src={"./logo.jpeg"} />

Potrebbe essere necessario utilizzare richiedono:

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


Un'altra opzione sarebbe quella di importare prima l'immagine come tale:

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

o ...

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

quindi collegalo ...

<img src={logo} />

Consiglierei questa opzione soprattutto se stai riutilizzando la fonte dell'immagine.


13
Fare attenzione a non dimenticare .all'inizio dell'URL relativo. Dovrebbe essere<img src={require('./one.jpeg')} />
Nuhman,

1
Qualcuno di questi metodi influenza prestazioni come il tempo di caricamento dell'immagine? In tal caso, quale è la migliore per quanto riguarda le prestazioni?
Inaam ur Rehman,

1
@ انعامالرحمٰن - Alcuni commenti qui stackoverflow.com/questions/31354559/… ma il TL; DR non è, nessuna differenza di prestazioni.
Apswak,

Qui manca il fatto che almeno con il webpack 4, il caricatore da usare è url-loader invece del file uno o precedente
Carmine Tambascia

64

Il modo migliore è importare prima l'immagine e poi usarla.

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
Perché è il modo migliore?
Jason Leach,

8
È il modo migliore se è necessario riutilizzarlo nello stesso componente, è possibile utilizzarlo senza riferimento al percorso. È una buona pratica @JasonLeach
Arslan shakoor

Jason Leach è un modo più pulito
Arslan shakoor

8

È necessario racchiudere il percorso di origine dell'immagine all'interno {}

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

È necessario utilizzare requirese si utilizzawebpack

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

8

All'interno della cartella pubblica creare una cartella delle risorse e posizionare il percorso dell'immagine di conseguenza.

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

Grazie, questo mi è stato utile in una situazione in cui le immagini possono o non possono esistere nella cartella perché vengono importate in modo dinamico in base alla risorsa mostrata.
Sébastien De Varennes,

4

il modo migliore per importare l'immagine è ...

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
Le importazioni relative al di fuori di src / non sono supportate. Per fare questo dovrai mantenere le tue immagini in src /, che non è raccomandato
toing_toing

@toing_toing Perché non consigli di mantenere le immagini in src? La documentazione ufficiale contiene esempi in cui questo è il caso: facebook.github.io/create-react-app/docs/…
roob

aumenta le dimensioni del pacchetto webpack e i tempi di compilazione, è necessario ricompilare ogni volta che si cambia un asset e aumentare i tempi di caricamento. Preferirei metterlo nella cartella pubblica e collegarlo tramite url.
toing_toing

4
@toing_toing Dici che preferiresti "piuttosto ...." ma non dici come farlo.
Thomas Jay Rush,

2

Hai due modi per farlo.

Primo

Importa l'immagine in cima alla classe e poi fai riferimento nel tuo <img/>elemento in questo modo

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

Secondo

Puoi specificare direttamente il percorso dell'immagine usando require('../pathToImh/img')in <img/>elemento come questo

import React, { Component } from 'react'; 

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


1

La mia risposta è sostanzialmente molto simile a quella di Rubzen. Uso l'immagine come valore dell'oggetto, tra l'altro. Due versioni funzionano per me:

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

o

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

Senza involucri, ma anche questa è un'applicazione diversa.

Ho controllato anche la soluzione "import" e in alcuni casi funziona (ciò che non sorprende, che viene applicato nel pattern App.js in React), ma non nel caso sopra il mio.


1

Ho trovato un altro modo per implementarlo (questo è un componente funzionale):

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

Spero che sia d'aiuto!


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

L'ho usato in questo modo e funziona ... Spero ti sia utile.

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

esporta immagine predefinita


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.