295 votes

Comment référencer une image locale dans React ?

Comment puis-je charger une image à partir d'un répertoire local et l'inclure dans l'application reactjs img src tag ?

J'ai une image appelée one.jpeg dans le même dossier que mon composant et j'ai essayé à la fois <img src="one.jpeg" /> et <img src={"one.jpeg"} /> à l'intérieur de mon render mais l'image ne s'affiche pas. De plus, je n'ai pas accès à webpack config puisque le projet est créé avec le fichier officiel create-react-app utilitaire de ligne de commande.

Mise à jour : Cela fonctionne si j'importe d'abord l'image avec import img from './one.jpeg' et l'utiliser à l'intérieur img src={img} mais j'ai beaucoup de fichiers d'images à importer et je veux donc les utiliser dans le formulaire, img src={'image_name.jpeg'} .

3 votes

0 votes

0 votes

J'ai en fait un problème similaire, mon image a été importée dans le fichier index.jsx, j'ai les chargeurs dans webpack, la face de compilation fonctionne bien, comme en effet une copie de l'image a été créée dans mon dossier server/public/js avec un numéro aléatoire, et le chemin correct vers elle est dans le bundler, mais je ne peux pas visualiser l'image. Il est également étrange que l'image soit produite dans le dossier server/public/js et non server/public/img comme je l'ai écrit dans index.js.

524voto

Apswak Points 1196

Tout d'abord, enveloppez le src dans {}

Ensuite, si vous utilisez Webpack ; Au lieu de : <img src={"./logo.jpeg"} />

Vous devrez peut-être utiliser require :

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


Une autre option serait d'importer d'abord l'image en tant que telle :

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

ou ...

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

puis le brancher...

<img src={logo} />

Je recommande cette option, surtout si vous réutilisez la source de l'image.

16 votes

Veillez à ne pas oublier le . au début de l'url relative. Devrait être <img src={require('./one.jpeg')} />

1 votes

L'une de ces méthodes affecte-t-elle les performances, comme le temps de chargement de l'image ? Si oui, laquelle est la plus performante ?

1 votes

@ - Quelques commentaires ici stackoverflow.com/questions/31354559/ mais le TL;DR est non, aucune différence de performance.

108voto

Arslan shakoor Points 481

Le mieux est d'importer d'abord l'image, puis de l'utiliser.

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

2 votes

Pourquoi est-ce le meilleur moyen ?

15 votes

C'est le meilleur moyen si vous avez besoin de réutiliser le même composant, vous pouvez l'utiliser sans référence de chemin. C'est une bonne pratique @JasonLeach

0 votes

Jason Leach c'est plus propre

17voto

Shubham Khatri Points 67350

Vous devez inclure le chemin d'accès à la source de l'image à l'intérieur de {}

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

Vous devez utiliser require si vous utilisez webpack

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

8voto

Abdul Moiz Points 76

La meilleure façon d'importer une image est...

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 votes

Les importations relatives en dehors de src/ ne sont pas supportées. Pour ce faire, vous devrez conserver vos images dans src/, ce qui n'est pas recommandé.

1 votes

@toing_toing Pourquoi ne recommandez-vous pas de conserver les images dans src ? La documentation officielle contient des exemples où c'est le cas : facebook.github.io/create-react-app/docs/

0 votes

Augmente la taille du bundle webpack et le temps de compilation, nécessité de recompiler à chaque fois que vous changez un actif et augmentation du temps de chargement. Je préfère le mettre dans le dossier public et le lier par url.

1voto

Ma réponse est fondamentalement très similaire à celle de Rubzen. J'utilise l'image comme valeur de l'objet, d'ailleurs. Deux versions fonctionnent pour moi :

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

ou

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

Sans emballage - mais c'est aussi une autre application.

J'ai également vérifié la solution "import" et dans quelques cas, cela fonctionne (ce qui n'est pas surprenant, c'est appliqué dans le modèle App.js dans React), mais pas dans le cas comme le mien ci-dessus.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X