Je suis en train de créer une petite application de réaction et mes images locales ne se chargeront pas. Des images comme des placehold.it/200x200
charges. Je pensais que ça pouvait être quelque chose avec le serveur?
Voici mon App.js
import React, { Component } from 'react';
class App extends Component {
render() {
return (
<div className="home-container">
<div className="home-content">
<div className="home-text">
<h1>foo</h1>
</div>
<div className="home-arrow">
<p className="arrow-text">
Vzdělání
</p>
<img src={"/images/resto.png"} />
</div>
</div>
</div>
);
}
}
export default App;
index.js:
import React, { Component } from 'react';
import { render } from 'react-dom';
import { Router, Route, Link } from 'react-router';
import { createHistory } from 'history';
import App from './components/app';
let history = createHistory();
render(
<Router history={history} >
<Route path="/" component={App} >
<Route path="vzdelani" component="" />
<Route path="znalosti" component="" />
<Route path="prace" component="" />
<Route path="kontakt" component="" />
</Route>
<Route path="*" component="" />
</Router>,
document.getElementById('app')
);
et server.js:
var path = require('path');
var express = require('express');
var webpack = require('webpack');
var config = require('./webpack.config.dev');
var app = express();
var compiler = webpack(config);
app.use(require('webpack-dev-middleware')(compiler, {
noInfo: true,
publicPath: config.output.publicPath
}));
app.use(require('webpack-hot-middleware')(compiler));
app.get('*', function(req, res) {
res.sendFile(path.join(__dirname, 'index.html'));
});
app.listen(3000, 'localhost', function(err) {
if (err) {
console.log(err);
return;
}
console.log('Listening at http://localhost:3000');
});
javascript
reactjs
Petrba
la source
la source
require()
. eg src = {require ("image path")}Réponses:
Lors de l' utilisation Webpack vous devez
require
images pour que Webpack de les traiter, ce qui expliquerait pourquoi les images externes charge tout interne ne sont pas, donc au lieu de<img src={"/images/resto.png"} />
vous devez utiliser le<img src={require('/images/image-name.png')} />
remplacement de l' image-name.png avec le nom de l' image correcte pour chacun d'eux. De cette façon, Webpack est capable de traiter et de remplacer l'img source.la source
import {require} from 'browserify'
. Mais ça ne marche pas.require
. Il est fourni dans le cadre decommonjs
. Voir stackoverflow.com/a/33251937/4103908 et viget.com/articles/gulp-browserify-starter-faq pour plus de détails qui pourraient vous aider à utiliser require et browserify à l'aide de Gulp.Module not found: Error: Can't resolve 'MyPNG.png' in 'C:...\app\components\images'
. Le chemin d'accès au fichier semble bon !.J'ai commencé à créer mon application avec create-react-app (voir l'onglet "Créer une nouvelle application"). Le fichier README.md qui l'accompagne donne cet exemple:
Cela a parfaitement fonctionné pour moi. Voici un lien vers le master doc pour ce README , qui explique (extrait):
la source
Unexpected character '�' (1:0) > 1 | �PNG | ^ 2 | 3 | 4 | IHDR��r~ipHYs���o�d��IDATx^�}���Ü�d7�w¿½ï¿½ ��JzH!�K�ï
...Une autre façon de faire:
Tout d' abord, installer ces modules:
url-loader
,file-loader
Utilisation de npm:
npm install --save-dev url-loader file-loader
Ensuite, ajoutez ceci à votre configuration Webpack:
limit
: Limite d'octets aux fichiers en ligne en tant qu'URL de donnéesVous devez installer les deux modules:
url-loader
etfile-loader
Enfin, vous pouvez faire:
Vous pouvez étudier ces chargeurs plus en détail ici:
chargeur d'url: https://www.npmjs.com/package/url-loader
chargeur de fichiers: https://www.npmjs.com/package/file-loader
la source
npm install --save-dev url-loader
Module build failed: SyntaxError: c:/contrivedpath/images/profile.jpg: Unexpected character '�' (1:0)
, tout ce que vous avez à faire est d'ajouter la configuration ci-dessus du chargeur d'url à votre configuration webpack, npm installurl-loader
ETfile-loader
et vous le ferez être fonctionnel. J'ai testé pour m'en assurer, et un chargeur de fichiers est nécessaire.ERROR in ./src/images/imagename.png Module parse failed: Unexpected character '�' (1:0)
message. Des idées?src=[Object module]
et lorsque je passe la souris, il dit ``En fait, je voudrais faire un commentaire, mais je ne suis pas encore autorisé. C'est pourquoi cela prétend être la prochaine réponse alors que ce n'est pas le cas.
Je voudrais continuer sur cette voie. Cela fonctionne bien quand on a une image, on peut simplement insérer. Dans mon cas, c'est un peu plus complexe: je dois mapper plusieurs images dessus. Jusqu'à présent, le seul moyen viable de le faire que j'ai trouvé est le suivant
Alors, ma question est de savoir s'il existe des moyens plus simples de traiter ces images? Inutile de dire que dans un cas plus général, le nombre de fichiers qui doivent être littéralement importés peut être énorme et le nombre de clés dans l'objet également. (L'objet dans ce code est clairement impliqué pour faire référence par les noms - ses clés) Dans mon cas, les procédures liées aux exigences n'ont pas fonctionné - les chargeurs ont généré des erreurs de nature étrange lors de l'installation et n'ont montré aucune marque de fonctionnement; et exiger en soi n'a pas non plus fonctionné.
la source
Je voulais juste laisser ce qui suit qui améliore la réponse acceptée ci-dessus.
En plus de la réponse acceptée, vous pouvez vous simplifier la vie un peu en spécifiant un
alias
chemin dans Webpack, vous n'avez donc pas à vous soucier de l'emplacement de l'image par rapport au fichier dans lequel vous vous trouvez actuellement. Veuillez voir l'exemple ci-dessous :Fichier Webpack:
Utilisation:
la source
Je voudrais moi aussi ajouter aux réponses de @Hawkeye Parker et @Kiszuriwalilibori:
Comme indiqué dans la documentation ici , il est généralement préférable d'importer les images au besoin.
Cependant, j'avais besoin de nombreux fichiers à charger dynamiquement, ce qui m'a conduit à mettre les images dans le dossier public ( également indiqué dans le README ), à cause de cette recommandation ci-dessous de la documentation:
J'espère que cela aide quelqu'un d'autre! Laissez-moi un commentaire si j'ai besoin de clarifier quelque chose.
la source
Je développe un projet qui utilise SSR et maintenant je souhaite partager ma solution basée sur quelques réponses ici.
Mon objectif est de précharger une image pour l'afficher lorsque la connexion Internet est hors ligne. (Ce n'est peut-être pas la meilleure pratique, mais comme cela fonctionne pour moi, c'est ok pour l'instant) Pour info, j'utilise également ReactHooks dans ce projet.
Pour utiliser l'image, je l'écris comme ça
la source
Essayez de changer le code dans server.js en -
la source
Parfois, vous pouvez entrer à la place de l'emplacement de votre image / src: essayez
au lieu de
la source
L'utilisation de l'attribut src de cette manière signifie que votre image sera chargée à partir du chemin absolu "/images/resto.png" de votre site. Le répertoire des images doit être situé à la racine de votre site. Exemple: http://www.example.com/images/resto.png
la source
Voici ce qui a fonctionné pour moi. Tout d'abord, comprenons le problème. Vous ne pouvez pas utiliser une variable comme argument à exiger. Webpack a besoin de savoir quels fichiers regrouper au moment de la compilation.
Quand j'ai eu l'erreur, j'ai pensé que cela pouvait être lié à un problème de chemin comme en absolu vs relatif. J'ai donc passé une valeur codée en dur pour exiger comme ci-dessous: <img src = {require ("../ assets / images / photosnap.svg")} alt = "" />. Cela fonctionnait bien. Mais dans mon cas, la valeur est une variable provenant des accessoires. J'ai essayé de passer une variable littérale de chaîne comme certains l'ont suggéré. Cela n'a pas fonctionné. J'ai également essayé de définir une méthode locale en utilisant le cas de commutation pour les 10 valeurs (je savais que ce n'était pas la meilleure solution, mais je voulais juste que cela fonctionne d'une manière ou d'une autre). Cela aussi n'a pas fonctionné. Ensuite, j'ai appris que nous ne pouvons PAS passer de variable au require.
Pour contourner le problème, j'ai modifié les données du fichier data.json pour les limiter au nom de mon image. Ce nom d'image qui provient des accessoires en tant que littéral String. Je l'ai concaténé à la valeur codée en dur, comme ceci:
La valeur réelle contenue dans le logo proviendrait du fichier data.json et ferait référence à un nom d'image tel que photosnap.svg.
la source
La meilleure façon de charger des images locales dans react est la suivante
Par exemple, conservez toutes vos images (ou tout élément tel que des vidéos, des polices) dans le dossier public comme indiqué ci-dessous.
Écrivez simplement
<img src='/assets/images/Call.svg' />
pour accéder à l'image Call.svg à partir de l'un de vos composants reactRemarque: conserver vos ressources dans un dossier public garantit que vous pouvez y accéder de n'importe où à partir du projet, en donnant simplement '/ path_to_image' et sans avoir besoin de traverser le chemin '../../' comme ceci
la source
vous devez d'abord importer l'image puis l'utiliser. Cela a fonctionné pour moi.
la source