295 votes

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

Comment puis-je charger une image à partir du répertoire local et l'inclure dans la balise reactjs img src ?

J'ai une image appelée one.jpeg dans le même dossier que mon composant et j'ai essayé à la fois ![](one.jpeg) et ![]({"one.jpeg"}) à l'intérieur de ma fonction render mais l'image n'apparaît pas. De plus, je n'ai pas accès au fichier de configuration de webpack car le projet est créé avec l'utilitaire en ligne de commande officiel create-react-app.

Mise à jour : Cela fonctionne si j'importe d'abord l'image avec import img from './one.jpeg' et l'utilise à l'intérieur de img src={img}, mais j'ai tellement de fichiers image à importer et donc, je veux les utiliser sous la forme img src={'nom_de_l_image.jpeg'}.

3 votes

Possible duplicate de React won't load local images

0 votes

0 votes

Je rencontre en fait un problème similaire, mon image est importée dans le fichier index.jsx, j'ai les chargeurs dans webpack, le visage de compilation fonctionne bien, en effet une copie de l'image est créée dans mon dossier server/public/js avec un numéro aléatoire, et le chemin correct vers celui-ci est dans le bundleur, mais je ne peux pas visualiser l'image. Il est également étrange qu'elle ait été produite dans le dossier server/public/js et non pas dans le dossier 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 : ![]({"./logo.jpeg"})

Il se peut que vous ayez besoin d'utiliser require:

![]({require('./logo.jpeg')})


Une autre option serait d'abord d'importer l'image comme ceci:

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

ou ...

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

puis insérez-le...

![]({logo})

Je recommanderais cette option notamment si vous réutilisez la source de l'image.

16 votes

Veillez à ne pas oublier le . au début de l'URL relative. Doit être ![]({require('./one.jpeg')})

1 votes

Est-ce que l'un de ces méthodes affecte les performances comme le temps de chargement de l'image ? Si oui, laquelle est la meilleure en termes de performances ?

1 votes

@ - Certains commentaires ici stackoverflow.com/questions/31354559/… mais en TL;DR, non, aucune différence de performance.

108voto

Arslan shakoor Points 481

La meilleure façon 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 (

    );
  }
}

2 votes

Pourquoi est-ce la meilleure façon ?

15 votes

C'est la meilleure façon si vous avez besoin de réutiliser dans 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 une façon plus propre

17voto

Shubham Khatri Points 67350

Vous devez envelopper le chemin de votre source d'image dans {}

Vous devez utiliser require si vous utilisez webpack

8voto

Abdul Moiz Points 76

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

import React, { Component } from 'react';

// import d'image
import CartIcon from '../images/CartIcon.png';

 class App extends Component {
  render() {
    return (

         // Appeler l'image dans la source comme ceci

    );
  }
}

1 votes

Les imports relatifs en dehors de src/ ne sont pas pris en charge. 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 comporte des exemples où tel est le cas: facebook.github.io/create-react-app/docs/…

0 votes

Augmente la taille du bundle webpack et le temps de compilation, il faut recompiler à chaque fois que vous changez une ressource et le temps de chargement augmente. Je préfère le mettre dans le dossier public et le lier par URL.

1voto

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

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

ou

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

Sans enveloppes - mais c'est une application différente aussi.

J'ai également vérifié la solution "import" et dans quelques cas, ça fonctionne (ce qui n'est pas surprenant, cela s'applique 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