¿Cómo hago referencia a una imagen local en React?

166

¿Cómo puedo cargar la imagen del directorio local e incluirla en la reactjs img srcetiqueta?

Tengo una imagen llamada one.jpegdentro de la misma carpeta que mi componente y probé ambas <img src="one.jpeg" />y <img src={"one.jpeg"} />dentro de mi renderfunción, pero la imagen no aparece. Además, no tengo acceso al webpack configarchivo ya que el proyecto se creó con la create-react-applínea de comando oficial util.

Actualización: esto funciona si primero importo la imagen import img from './one.jpeg'y la uso dentro img src={img}, pero tengo tantos archivos de imagen para importar y, por lo tanto, quiero usarlos en el formulario img src={'image_name.jpeg'},.

Código Postal
fuente
2
Posible duplicado de React no cargará imágenes locales
Vanuan
De hecho, tengo un problema similar, mi imagen se ha importado en el archivo index.jsx, tengo los cargadores en el paquete web, la cara de compilación funciona bien, ya que de hecho se ha creado una copia de la imagen en mi servidor / public / js carpeta con un número aleatorio, y la ruta correcta está en el paquete, pero no puedo visualizar la imagen. También es extraño que se haya producido en el servidor / public / js y no en el servidor / public / img como escribí en index.js
Carmine Tambascia

Respuestas:

303

En primer lugar, envuelva el src en {}

Entonces, si usa Webpack; En vez de: <img src={"./logo.jpeg"} />

Es posible que deba usar requieren:

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


Otra opción sería importar primero la imagen como tal:

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

o ...

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

luego enchufarlo ...

<img src={logo} />

Recomiendo esta opción especialmente si está reutilizando la fuente de la imagen.

Apswak
fuente
13
Tenga cuidado de no olvidar .el comienzo de la URL relativa. Debería ser<img src={require('./one.jpeg')} />
Nuhman
1
¿Alguno de estos métodos afecta el rendimiento como el tiempo de carga de la imagen? Si es así, ¿cuál es mejor en cuanto al rendimiento?
Inaam ur Rehman
1
@ انعامالرحمٰن - Algunos comentarios aquí stackoverflow.com/questions/31354559/… pero el TL; DR es no, no hay diferencia de rendimiento.
Apswak
Aquí falta el hecho de que al menos con webpack 4, el cargador a usar es url-loader en lugar del archivo uno o el anterior
Carmine Tambascia
64

La mejor manera es importar la imagen primero y luego 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>
    );
  }
} 
Arslan shakoor
fuente
1
¿Por qué es la mejor manera?
Jason Leach
8
Es la mejor manera si necesita reutilizar en el mismo componente, puede usarlo sin referencia de ruta. Es una buena práctica @JasonLeach
Arslan shakoor
Jason Leach es una forma más limpia
Arslan shakoor
8

Necesita envolver su ruta de origen de imagen dentro {}

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

Debe usar requiresi usawebpack

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

Dentro de la carpeta pública, cree una carpeta de activos y coloque la ruta de la imagen en consecuencia.

<img className="img-fluid" 
     src={`${process.env.PUBLIC_URL}/assets/images/uc-white.png`} 
     alt="logo"/>
Harshvardhan Singh Baghel
fuente
Gracias, esto me resultó útil en una situación en la que las imágenes pueden o no existir en la carpeta porque se importan dinámicamente en función del recurso que se muestra.
Sébastien De Varennes
4

la mejor manera de importar imágenes es ...

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
fuente
1
Las importaciones relativas fuera de src / no son compatibles. Para hacer esto, tendrá que mantener sus imágenes en src /, lo cual no es recomendable
toing_toing
@toing_toing ¿Por qué no recomienda mantener las imágenes en src? La documentación oficial tiene ejemplos donde este es el caso: facebook.github.io/create-react-app/docs/…
roob
aumenta el tamaño del paquete de paquete web y el tiempo de compilación, necesita volver a compilar cada vez que cambia un activo y aumenta el tiempo de carga. Prefiero ponerlo en la carpeta pública y vincular por url.
toing_toing
44
@toing_toing Dices que preferirías ... pero no dices cómo hacerlo.
Thomas Jay Rush
1

Mi respuesta es básicamente muy similar a la de Rubzen. Yo uso la imagen como el valor del objeto, por cierto. Dos versiones me funcionan:

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

o

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

Sin envoltorios, pero esa es una aplicación diferente también.

También he comprobado la solución de "importación" y en algunos casos funciona (lo que no es sorprendente, se aplica en el patrón App.js en React), pero no en el caso anterior.

Kiszuriwalilibori
fuente
1

Tienes dos formas de hacerlo.

primero

Importe la imagen en la parte superior de la clase y luego haga referencia a ella en su <img/>elemento como este

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

Segundo

Puede especificar directamente la ruta de la imagen utilizando require('../pathToImh/img')en el <img/>elemento como éste

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
fuente
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
fuente
0

Lo he usado de esta manera, y funciona ... Espero que sea útil.

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

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

exportar imagen predeterminada

LOVENEET SINGH
fuente
0

Como algunos mencionaron en los comentarios, puede colocar las imágenes en la carpeta pública. Esto también se explica en los documentos de Create-React-App: https://create-react-app.dev/docs/using-the-public-folder/

Dyedwiper
fuente
En realidad, no se necesita más código que la línea en los documentos<img src={process.env.PUBLIC_URL + '/img/logo.png'} />
Dyedwiper
0

Encontré otra forma de implementar esto (este es un componente funcional):

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

¡Espero eso ayude!

Kai Sheng Tung
fuente