Como faço para referenciar uma imagem local no React?


166

Como posso carregar uma imagem do diretório local e incluí-la na reactjs img srctag?

Eu tenho uma imagem chamada one.jpegdentro da mesma pasta do meu componente e tentei ambas <img src="one.jpeg" />e <img src={"one.jpeg"} />dentro da minha renderfunção, mas a imagem não aparece. Além disso, não tenho acesso ao webpack configarquivo, pois o projeto foi criado com o create-react-apputilitário de linha de comando oficial .

Atualização: Isso funciona se eu importar a imagem pela primeira vez import img from './one.jpeg'e usá-la dentro img src={img}, mas tenho muitos arquivos de imagem para importar e, portanto, quero usá-los no formulário img src={'image_name.jpeg'}.




Na verdade, tenho um problema semelhante, minha imagem foi importada no arquivo index.jsx, tenho os carregadores no webpack, o rosto de compilação está funcionando bem, pois, de fato, uma cópia da imagem foi criada no meu servidor / público / js pasta com um número aleatório e o caminho correto para ele está no empacotador, mas não consigo visualizar a imagem. Também é estranho que tenha sido produzido no servidor / public / js e não no server / public / img como escrevi no index.js
Carmine Tambascia

Respostas:


302

Primeiro, envolva o src em {}

Então, se estiver usando o Webpack; Ao invés de: <img src={"./logo.jpeg"} />

Você pode precisar usar exigir:

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


Outra opção seria importar primeiro a imagem como tal:

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

ou ...

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

depois conecte-o ...

<img src={logo} />

Eu recomendaria esta opção, especialmente se você estiver reutilizando a fonte da imagem.


13
Tome cuidado para não esquecer .o início do URL relativo. Deve ser<img src={require('./one.jpeg')} />
Nuhman

1
Algum desses métodos afeta o desempenho, como o tempo de carregamento da imagem? Em caso afirmativo, qual é o melhor desempenho?
Inaam ur Rehman

1
@ انعامالرحمٰن - Alguns comentários aqui stackoverflow.com/questions/31354559/… mas o TL; DR não é, não há diferença de desempenho.
Apswak

Aqui está faltando o fato de que, pelo menos com o webpack 4, o carregador a ser usado é o url-loader, em vez do arquivo um ou o anterior
Carmine Tambascia

64

A melhor maneira é importar a imagem primeiro e depois usá-la.

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 que é o melhor caminho?
Jason Leach

8
É a melhor maneira, se você precisar reutilizar no mesmo componente, poderá usá-lo sem referência de caminho. É uma boa prática @JasonLeach
Arslan shakoor

Jason Leach é maneira mais limpa
Arslan Shakoor

8

Você precisa agrupar seu caminho de origem da imagem dentro {}

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

Você precisa usar requirese estiver usandowebpack

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

8

Dentro da pasta pública, crie uma pasta de ativos e coloque o caminho da imagem de acordo.

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

Obrigado, isso me foi útil em uma situação em que as imagens podem ou não existir na pasta porque são importadas dinamicamente com base no recurso mostrado.
Sébastien De Varennes

4

a melhor maneira de importar imagens é ...

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
As importações relativas fora de src / não são suportadas. Para fazer isso, você deverá manter suas imagens em src /, o que não é recomendado
toing_toing 03/07/19

@toing_toing Por que você não recomenda manter imagens no src? A documentação oficial tem exemplos onde este é o caso: facebook.github.io/create-react-app/docs/...
Roob

aumenta o tamanho do pacote da Webpack e o tempo de compilação, é necessário recompilar toda vez que você altera um ativo e aumenta o tempo de carregamento. Prefiro colocá-lo na pasta pública e vincular por URL.
2191919

4
@toing_toing Você diz que prefere ... mas não diz como fazer isso.
Thomas Jay Corrida

1

Minha resposta é basicamente muito semelhante à de Rubzen. Eu uso a imagem como o valor do objeto, btw. Duas versões funcionam para mim:

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

ou

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

Sem invólucros - mas essa também é uma aplicação diferente.

Eu verifiquei também a solução "import" e, em alguns casos, funciona (o que não é surpreendente, aplicado no padrão App.js no React), mas não no caso como o meu acima.


1

Você tem duas maneiras de fazer isso.

Primeiro

Importe a imagem na parte superior da classe e faça referência a ela no seu <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

Você pode especificar diretamente o caminho da imagem usando require('../pathToImh/img')no <img/>elemento como este

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

Eu usei dessa maneira, e funciona ... Espero que seja ú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 imagem padrão



0

Eu encontrei outra maneira de implementar isso (este é um componente funcional):

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

Espero que ajude!

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.