¿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'},.




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.


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

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

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

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

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.


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


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

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

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



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!

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.