Saya membuat aplikasi react kecil dan gambar lokal saya tidak bisa dimuat. Gambar seperti placehold.it/200x200
memuat. Saya pikir mungkin itu bisa menjadi sesuatu dengan server?
Ini adalah App.js saya
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')
);
dan 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
sumber
sumber
require()
. misalnya src = {membutuhkan ("image path")}Jawaban:
Saat menggunakan Webpack, Anda memerlukan
require
gambar agar Webpack dapat memprosesnya, yang akan menjelaskan mengapa gambar eksternal dimuat sementara internal tidak, jadi<img src={"/images/resto.png"} />
Anda perlu<img src={require('/images/image-name.png')} />
mengganti image-name.png dengan nama gambar yang benar untuk masing-masing gambar. Dengan begitu, Webpack dapat memproses dan mengganti img sumber.sumber
import {require} from 'browserify'
. Tapi itu tidak berhasil.require
. Ini disediakan sebagai bagian daricommonjs
. Lihat stackoverflow.com/a/33251937/4103908 dan viget.com/articles/gulp-browserify-starter-faq untuk detail lebih lanjut yang dapat membantu Anda menggunakan Requirement dan browserify menggunakan Gulp.Module not found: Error: Can't resolve 'MyPNG.png' in 'C:...\app\components\images'
. Path ke file terlihat bagus !.Saya mulai membuat aplikasi saya dengan create-react-app (lihat tab "Membuat Aplikasi Baru"). README.md yang menyertainya memberikan contoh ini:
Ini bekerja dengan sempurna untuk saya. Ini a tautan ke dokumen master untuk README itu , yang menjelaskan (kutipan):
sumber
Unexpected character '�' (1:0) > 1 | �PNG | ^ 2 | 3 | 4 | IHDR��r~ipHYs���o�d��IDATx^�}���Ü�d7�w¿½ï¿½ ��JzH!�K�ï
...Cara lain untuk melakukannya:
Pertama, instal modul ini:
url-loader
,file-loader
Menggunakan npm:
npm install --save-dev url-loader file-loader
Selanjutnya, tambahkan ini ke konfigurasi Webpack Anda:
limit
: Batas byte ke file sebaris sebagai URL DataAnda perlu menginstal kedua modul:
url-loader
danfile-loader
Terakhir, Anda dapat melakukan:
Anda dapat menyelidiki loader ini lebih lanjut di sini:
url-loader: https://www.npmjs.com/package/url-loader
file-loader: https://www.npmjs.com/package/file-loader
sumber
npm install --save-dev url-loader
Module build failed: SyntaxError: c:/contrivedpath/images/profile.jpg: Unexpected character '�' (1:0)
, yang perlu Anda lakukan hanyalah menambahkan konfigurasi url-loader di atas ke konfigurasi webpack Anda, npm installurl-loader
DANfile-loader
dan Anda akan melakukannya menjadi fungsional. Saya menguji untuk memastikan, dan file-loader diperlukan.ERROR in ./src/images/imagename.png Module parse failed: Unexpected character '�' (1:0)
pesannya. Ada ide?src=[Object module]
dan ketika saya mengarahkan mouse saya, dikatakan 'tidak dapat memuat gambar'Sebenarnya saya ingin memberi komentar, tapi saya belum berwenang. Itulah mengapa itu berpura-pura menjadi jawaban berikutnya padahal tidak.
Saya ingin melanjutkan jalan itu. Itu bekerja dengan lancar ketika seseorang memiliki gambar yang dapat disisipkan dengan mudah. Dalam kasus saya, itu sedikit lebih kompleks: Saya harus memetakan beberapa gambar. Sejauh ini satu-satunya cara yang bisa diterapkan untuk melakukan ini yang saya temukan adalah sebagai berikut
Jadi, pertanyaan saya adalah apakah ada cara yang lebih sederhana untuk memproses gambar ini? Tak perlu dikatakan bahwa dalam kasus yang lebih umum, jumlah file yang harus diimpor secara harfiah bisa sangat besar dan jumlah kunci dalam objek juga. (Objek dalam kode itu terlibat secara jelas untuk merujuk dengan nama -kuncinya) Dalam kasus saya, prosedur yang berhubungan dengan persyaratan tidak berfungsi - loader menghasilkan kesalahan yang aneh selama instalasi dan tidak menunjukkan tanda berfungsi; dan membutuhkan dengan sendirinya tidak berhasil.
sumber
Saya hanya ingin meninggalkan yang berikut ini yang meningkatkan jawaban yang diterima di atas.
Selain jawaban yang diterima, Anda dapat membuat hidup Anda sedikit lebih mudah dengan menentukan
alias
jalur di Webpack, jadi Anda tidak perlu khawatir di mana letak gambar relatif terhadap file Anda saat ini. Lihat contoh di bawah :File webpack:
Menggunakan:
sumber
Saya juga ingin menambahkan jawaban dari @Hkeye Parker dan @Kiszuriwalilibori:
Seperti yang dicatat dari dokumen di sini , biasanya yang terbaik adalah mengimpor gambar sesuai kebutuhan.
Namun, saya membutuhkan banyak file untuk dimuat secara dinamis, yang membuat saya meletakkan gambar di folder publik ( juga dinyatakan dalam README ), karena rekomendasi di bawah ini dari dokumentasi:
Semoga itu bisa membantu orang lain! Tinggalkan saya komentar jika saya perlu menjelaskan semua itu.
sumber
Saya sedang mengembangkan proyek yang menggunakan SSR dan sekarang saya ingin membagikan solusi saya berdasarkan beberapa jawaban di sini.
Tujuan saya adalah memuat gambar untuk ditampilkan saat koneksi internet offline. (Ini mungkin bukan praktik terbaik, tetapi karena ini berhasil untuk saya, tidak apa-apa untuk saat ini) FYI, saya juga menggunakan ReactHooks dalam proyek ini.
Untuk menggunakan gambar, saya menulisnya seperti ini
sumber
Coba ubah kode di server.js menjadi -
sumber
Kadang-kadang Anda dapat masuk, bukan di lokasi gambar / src: coba
dari pada
sumber
Menggunakan atribut src dengan cara ini berarti, gambar Anda akan dimuat dari jalur absolut "/images/resto.png" untuk situs Anda. Direktori gambar harus ditempatkan di root situs Anda. Contoh: http://www.example.com/images/resto.png
sumber
Inilah yang berhasil untuk saya. Pertama, mari kita pahami masalahnya. Anda tidak dapat menggunakan variabel sebagai argumen yang diperlukan. Webpack perlu mengetahui file apa yang akan dipaketkan pada waktu kompilasi.
Ketika saya mendapat kesalahan, saya pikir itu mungkin terkait dengan masalah jalur seperti pada absolut vs relatif. Jadi saya memberikan nilai hard code untuk diminta seperti di bawah ini: <img src = {require ("../ assets / images / photosnap.svg")} alt = "" />. Itu bekerja dengan baik. Tetapi dalam kasus saya, nilainya adalah variabel yang berasal dari alat peraga. Saya mencoba melewatkan variabel literal string seperti yang disarankan beberapa. Tidak bekerja. Saya juga mencoba menentukan metode lokal menggunakan kasus sakelar untuk semua 10 nilai (saya tahu itu bukan solusi terbaik, tetapi saya hanya ingin itu berfungsi entah bagaimana). Itu juga tidak berhasil. Kemudian saya mengetahui bahwa kita TIDAK dapat meneruskan variabel ke memerlukan.
Sebagai solusinya, saya telah memodifikasi data dalam file data.json untuk membatasinya hanya pada nama gambar saya. Nama gambar ini yang berasal dari props sebagai String literal. Saya menggabungkannya ke nilai kode keras, seperti:
Nilai sebenarnya yang terkandung dalam logo akan berasal dari file data.json dan akan mengacu pada beberapa nama gambar seperti photosnap.svg.
sumber
Cara terbaik untuk memuat gambar lokal di react adalah sebagai berikut
Misalnya, Simpan semua gambar Anda (atau aset apa pun seperti video, font) di folder publik seperti yang ditunjukkan di bawah ini.
Cukup tulis
<img src='/assets/images/Call.svg' />
untuk mengakses gambar Call.svg dari salah satu komponen react AndaCatatan: Menjaga aset Anda di folder publik memastikan bahwa, Anda dapat mengaksesnya dari mana saja dari proyek, hanya dengan memberikan '/ path_to_image' dan tidak perlu jalur traversal '../../' seperti ini
sumber
Anda harus mengimpor gambar terlebih dahulu lalu menggunakannya. Itu berhasil untuk saya.
sumber