Estou construindo um pequeno aplicativo de reação e minhas imagens locais não carregam. Imagens como placehold.it/200x200
cargas. Eu pensei que talvez pudesse ser algo com o servidor?
Aqui está meu 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')
);
e 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
fonte
fonte
require()
. por exemplo, src = {require ("image path")}Respostas:
Ao usar o Webpack, você precisa das
require
imagens para que o Webpack as processe, o que explicaria por que as imagens externas carregam enquanto as internas não, então, em vez de<img src={"/images/resto.png"} />
usar a<img src={require('/images/image-name.png')} />
substituição de image-name.png pelo nome de imagem correto para cada uma delas. Dessa forma, o Webpack é capaz de processar e substituir o img de origem.fonte
import {require} from 'browserify'
. Mas não está funcionando.require
. Ele é fornecido como parte decommonjs
. Consulte stackoverflow.com/a/33251937/4103908 e viget.com/articles/gulp-browserify-starter-faq para obter mais detalhes que podem ajudá-lo a usar o require e o browserify usando o Gulp.Module not found: Error: Can't resolve 'MyPNG.png' in 'C:...\app\components\images'
. O caminho para o arquivo parece bom !.Comecei a construir meu aplicativo com create-react-app (consulte a guia "Criar um novo aplicativo"). O README.md que o acompanha dá este exemplo:
Isso funcionou perfeitamente para mim. Aqui está um link para o documento mestre desse README , que explica (trecho):
fonte
Unexpected character '�' (1:0) > 1 | �PNG | ^ 2 | 3 | 4 | IHDR��r~ipHYs���o�d��IDATx^�}���Ü�d7�w¿½ï¿½ ��JzH!�K�ï
...Outra maneira de fazer:
Em primeiro lugar, instalar esses módulos:
url-loader
,file-loader
Usando npm:
npm install --save-dev url-loader file-loader
Em seguida, adicione à sua configuração do Webpack:
limit
: Limite de bytes para arquivos embutidos como URL de dadosVocê precisa instalar os dois módulos:
url-loader
efile-loader
Finalmente, você pode fazer:
Você pode investigar esses carregadores mais aqui:
url-loader: https://www.npmjs.com/package/url-loader
file-loader: https://www.npmjs.com/package/file-loader
fonte
npm install --save-dev url-loader
Module build failed: SyntaxError: c:/contrivedpath/images/profile.jpg: Unexpected character '�' (1:0)
vir algo como , tudo o que você precisa fazer é adicionar esta configuração do url-loader acima à configuração do seu webpack, npm installurl-loader
Efile-loader
e você irá ser funcional. Eu testei para ter certeza, e o carregador de arquivos é necessário.ERROR in ./src/images/imagename.png Module parse failed: Unexpected character '�' (1:0)
mensagem. Alguma ideia?src=[Object module]
e quando passo o mouse, ele diz 'não foi possível carregar a imagem'Na verdade gostaria de comentar, mas ainda não estou autorizado. É por isso que fingir ser a próxima resposta enquanto não é.
Eu gostaria de continuar nesse caminho. Isso funciona bem quando se tem uma imagem que pode ser inserida com facilidade. No meu caso isso é um pouco mais complexo: tenho que mapear várias fotos. Até agora, a única maneira viável de fazer isso que encontrei é a seguinte
Então, minha pergunta é se existem maneiras mais simples de processar essas imagens? Nem é preciso dizer que, em casos mais gerais, o número de arquivos que devem ser importados literalmente pode ser enorme e o número de chaves no objeto também. (O objeto nesse código está envolvido claramente para se referir por nomes - suas chaves) No meu caso, os procedimentos relacionados à solicitação não funcionaram - os carregadores geraram erros de tipo estranho durante a instalação e não mostraram nenhuma marca de funcionamento; e exigir por si só não funcionou.
fonte
Eu só queria deixar o seguinte, o que reforça a resposta aceita acima.
Além da resposta aceita, você pode tornar sua vida um pouco mais fácil especificando um
alias
caminho no Webpack, para que não precise se preocupar onde a imagem está localizada em relação ao arquivo em que você está no momento. Veja o exemplo abaixo :Arquivo Webpack:
Usar:
fonte
Eu também gostaria de acrescentar às respostas de @Hawkeye Parker e @Kiszuriwalilibori:
Como foi observado nos documentos aqui , normalmente é melhor importar as imagens conforme necessário.
Porém, muitos arquivos precisavam ser carregados dinamicamente, o que me levou a colocar as imagens na pasta pública ( também declarado no README ), devido a esta recomendação abaixo da documentação:
Espero que ajude mais alguém! Deixe-me um comentário se eu precisar esclarecer qualquer coisa.
fonte
Estou desenvolvendo um projeto que utiliza SSR e agora quero compartilhar minha solução com base em algumas respostas aqui.
Meu objetivo é pré-carregar uma imagem para mostrá-la quando a conexão com a Internet estiver offline. (Pode não ser a melhor prática, mas como funciona para mim, por enquanto está tudo bem) Para sua informação, também uso ReactHooks neste projeto.
Para usar a imagem, eu escrevo assim
fonte
Tente alterar o código em server.js para -
fonte
Às vezes, você pode inserir em vez de em sua localização de imagem / src: try
ao invés de
fonte
Usar o atributo src desta forma significa que sua imagem será carregada do caminho absoluto "/images/resto.png" para seu site. O diretório de imagens deve estar localizado na raiz do seu site. Exemplo: http://www.example.com/images/resto.png
fonte
Aqui está o que funcionou para mim. Primeiro, vamos entender o problema. Você não pode usar uma variável como argumento para requerer. O Webpack precisa saber quais arquivos empacotar no momento da compilação.
Quando recebi o erro, pensei que poderia estar relacionado ao problema do caminho como em absoluto vs relativo. Então, passei um valor embutido em código para exigir como abaixo: <img src = {require ("../ assets / images / photosnap.svg")} alt = "" />. Estava funcionando bem. Mas, no meu caso, o valor é uma variável vinda dos adereços. Tentei passar uma variável literal de string como alguns sugeriram. Não funcionou. Também tentei definir um método local usando switch case para todos os 10 valores (eu sabia que não era a melhor solução, mas queria que funcionasse de alguma forma). Isso também não funcionou. Então descobri que NÃO podemos passar variáveis para o require.
Como solução alternativa, modifiquei os dados no arquivo data.json para restringi-los apenas ao nome da minha imagem. Este nome de imagem que vem dos adereços como um literal de string. Eu concatenei-o com o valor codificado, assim:
O valor real contido no logotipo viria do arquivo data.json e se referiria a algum nome de imagem como photosnap.svg.
fonte
A melhor maneira de carregar imagens locais no react é a seguinte
Por exemplo, mantenha todas as suas imagens (ou quaisquer recursos como vídeos, fontes) na pasta pública conforme mostrado abaixo.
Basta escrever
<img src='/assets/images/Call.svg' />
para acessar a imagem Call.svg de qualquer um de seus componentes reactObservação: manter seus ativos na pasta pública garante que você possa acessá-los de qualquer lugar do projeto, apenas fornecendo '/ path_to_image' e sem a necessidade de qualquer percurso de caminho '../../' como este
fonte
você deve importar a imagem primeiro e depois usá-la. Funcionou para mim
fonte