4
我創建了一個帶有圖像設置作爲組件背景的橫幅狀組件,但是我無法使其運行。我嘗試了在線發佈的不同建議,但沒有運氣,目前我不確定我的錯誤是否在反應代碼中,或者是沒有正確加載文件的webpack。React&Webpack:加載並顯示圖像作爲背景圖像
這是我的文件結構:
AppFolder
- client/
-- components/
-- data/
-- images/
----- banners/
------- frontPageBanner2.png
-------
-- styles/
-- myApp.js
-- store.js
---------
- index.html
- package.json
- webpack.config.dev.js
這裏是我的WebPack配置:
var path = require('path');
var webpack = require('webpack');
module.exports = {
devtool: 'source-map',
entry: [
'webpack-hot-middleware/client',
'./client/myApp'
],
output: {
path: path.join(__dirname, 'dist'),
filename: 'bundle.js',
publicPath: '/static/'
},
plugins: [
new webpack.HotModuleReplacementPlugin(),
new webpack.NoErrorsPlugin()
],
module: {
loaders: [
// js
{
test: /\.js$/,
exclude: /node_modules/,
loaders: ['babel'],
presets: ['es2015', 'react'],
include: path.join(__dirname, 'client')
},
// CSS
{
test: /\.scss$/,
include: path.join(__dirname, 'client'),
loader: 'style-loader!css-loader!sass-loader'
},
// PNG
{
test: /\.(jpg|png)$/,
loader: "url-loader?limit=25000",
//loader: 'file?name=[path][name].[ext]',
include: path.join(__dirname, 'client')
},
// FontAwesome
{ test: /\.woff(2)?(\?v=[0-9]\.[0-9]\.[0-9])?$/, loader: "url-loader?limit=10000&mimetype=application/font-woff" },
{ test: /\.(ttf|eot|svg)(\?v=[0-9]\.[0-9]\.[0-9])?$/,
exclude: path.join(__dirname, 'client/images'),
loader: "file-loader" },
// other SVG
{ test: /\.svg$/,
loader: 'url-loader',
query: { mimetype: "image/svg+xml" },
include: path.join(__dirname, 'client/images')
},
]
}
};
這裏就是我如何使用它的應用程序:
export class Banner extends React.Component {
render() {
console.log(this.props.banners);
// = '../images/banners/frontPageBanner.png'
const bannerImg = this.props.image.backgroundImage;
var bannerStyle = {
background: 'url(' + bannerImg + ')',
backgroundSize: this.props.image.backgroundSize,
backgroundPosition: this.props.image.backgroundPosition,
}
return (
<section key={this.props.key} className="container hero" style={bannerStyle}>
<div className="textbox">
<h2>{this.props.title}</h2>
</div>
</section>
)
}
}
這裏的生成的HTML :
<section class="container hero" style="background: url('../images/banners/frontPageBanner2.png') 100% 100%/contain;">
...
</section>
但沒有顯示圖像。同時打開圖像的src鏈接只顯示一個空白屏幕。爲什麼?我該如何解決它?
我試過了,是的,如果我手動插入一個路徑到'require()'它工作。但是,該組件應該是動態的,並且必須從道具中讀取URL。 'require(this.props.image.backgroundImage)'不起作用... – spik3s
您可以隨時加載圖片並傳遞給道具,但如果網址真的是動態的,並且不應該捆綁到您的應用中,那麼您絕對需要傳遞絕對路徑 - 例如「http://localhost/myapp/public/img/myimage.jpg」。那麼你將不需要使用require,你的應用會變得更小。 –
這就是我最終做的事情,我使用絕對路徑來提供來自同一個服務器的照片,以及帶有URL的JSON數據。感謝您的幫助! – spik3s