213 votes

Chemin correct pour img sur React.js

J'ai un problème avec mes images sur mon projet react. En effet, j'ai toujours pensé que le chemin relatif dans l'attribut src était construit sur l'architecture des fichiers.

Voici l'architecture de mes fichiers :

components
    file1.jsx
    file2.jsx
    file3.jsx
conainter
img
js 
... 

Cependant, j'ai réalisé que le chemin était construit sur l'url. Dans un de mes composants (par exemple dans file1.jsx) j'ai ceci :

localhost/details/2
<img src="../img/myImage.png" /> -> Works

localhost/details/2/id
<img src="../img/myImage.png" /> -> doesn't works, images are not displayed

Comment est-il possible de résoudre ce problème ? Je veux que dans toutes les formes de routes gérées par react-router, toutes les images puissent être affichées avec le même chemin.

2 votes

Pointez directement sur l'image, sans utiliser ../ ou autre.

5 votes

Vous devez utiliser require . Lire la suite réponse sur SO pour plus d'informations.

0 votes

J'espère que cette réponse vous aidera Réagir aux images locales

449voto

claireablani Points 2543

Je n'essaye pas de répondre à la question - juste une remarque que dans create-react-app, les chemins relatifs pour les images ne semblent pas fonctionner. Au lieu de cela, vous pouvez importer une image.

import logo from './logo.png' // relative path to image 

class Nav extends Component { 
    render() { 
        return ( 
            <img src={logo} alt={"logo"}/> 
        )  
    }
}

48 votes

Qu'en est-il des images dynamiques, par exemple, référencées dans un fichier json, dans create-react-app ?

2 votes

@zok Je pense que vous devriez exporter la variable du fichier JSON, importer la variable dans votre composant. Vous pouvez ensuite la référencer comme d'habitude. Par exemple, exportez const my_src = variable_here, importez {my_src} de my_file, et src={my_src}.

2 votes

import './styles/style.less'; **import logo from './styles/images/deadline.png';** J'obtiens une erreur sur la 2ème ligne : module non trouvé alors que l'image existe et que le chemin est correct.

221voto

Rubel hasan Points 385

Si vous avez utilisé create-react-app pour créer votre projet alors votre dossier public est accessible. Vous devez donc ajouter votre image dans le dossier public.

public/images/

<img src="/images/logo.png" />

0 votes

J'étais sur le point de poser une question mais CETTE réponse a résolu mon problème ! !! Devrait être marqué comme réponse. Merci ! !! +1

1 votes

Cela a fonctionné pour moi. Rappelez-vous juste que vous devez redémarrer l'application si vous avez ajouté une nouvelle image dans le répertoire public.

0 votes

Il s'agit en effet d'un moyen rapide de traiter les situations, mais il ne fonctionnera que si vous n'avez pas besoin d'URL relatives. Par exemple, si vous fournissez votre application à www.example.com/react-app le dossier public sera exposé sur www.example.com, sans qu'il soit nécessaire d'en faire la demande. react-app . Cela peut poser problème, c'est pourquoi la réponse acceptée est la bonne. Sources : ajout d'actifs y en utilisant le dossier public

95voto

prekolna Points 734

Vous utilisez une url relative, qui est relative à l'url actuelle, et non au système de fichiers. Vous pouvez résoudre ce problème en utilisant des urls absolues

<img src ="http://localhost:3000/details/img/myImage.png" />

Mais ce n'est pas génial pour le déploiement sur www.my-domain.bike, ou tout autre site. Il est préférable d'utiliser une URL relative au répertoire racine du site.

<img src="/details/img/myImage.png" />

3 votes

Merci, je mettrais l'accent sur le / qui précède details (vs ./details etc, pour ceux qui pourraient confondre les deux).

2 votes

Même pour moi, ça ne marche pas. J'utilise reactjs con cordova et en utilisant ES5 comme eslint

2 votes

Bien que cette solution et celle de claireablani fonctionnent toutes les deux, celle de claireablani est ce que les docs create-react-app recommandent. Ils énumèrent un certain nombre d'avantages par rapport à la mise en public des ressources facebook.github.io/create-react-app/docs/

72voto

Dima Gershman Points 369

Avec create-react-app il y a public (avec index.html ...). Si vous placez votre "myImage.png" à cet endroit, disons sous img vous pourrez alors y accéder par le biais de ce sous-dossier :

<img src={window.location.origin + '/img/myImage.png'} />

8 votes

Ceci devrait être marqué comme la bonne réponse, car c'est en fait la solution reactjs pour tous les types de chemins d'accès de tous les fichiers.

0 votes

Je ne comprends pas pourquoi vous pensez que c'est la bonne réponse. Je viens d'essayer cette réponse et celles de Claireblani et de Claire ont fonctionné, mais pas celle-ci. Cette réponse ne fonctionne que si l'image se trouve dans le dossier public. Mes images doivent-elles se trouver dans le dossier public ? @Sami

0 votes

Oui @Maderas tout d'abord, cette réponse est la même que celle acceptée => il suffit de supprimer {} et l'url de base, vous pouvez utiliser simplement src='/chemin relatif de l'image' ou src='chemin absolu de l'image'. Ce qui est plus dans cette réponse, c'est qu'elle s'adapte à un chemin variable pour toute image.

46voto

prince sodhi Points 51

Dans mon cas, le code suivant fonctionne également.

<img src={require('../logo.png')} alt="logo" className="brand-logo"/>

1 votes

Cela a marché pour moi. Cela fonctionne dans le cas où vous ne voulez pas stocker les images dans le dossier public.

2 votes

Si vous rencontrez l'erreur [object Module] dans le src de l'image, procédez comme suit src={require('../logo.png').default}

1 votes

Cela fonctionne pour .csv également. Une aide précieuse.

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