我正在构建一个小的react应用程序,我的本地图像不会加载。图像就像占位符。它/ 200 x200型负载。我想可能是服务器的问题?

这是我的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')
);

和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');
});

当前回答

我正在开发一个使用SSR的项目,现在我想在这里分享我的解决方案。

我的目标是预加载图像显示它时,互联网连接离线。(这可能不是最好的做法,但因为它对我有用,现在还可以) 供参考,我在这个项目中也使用ReactHooks。

  useEffect(() => {
    // preload image for offline network
    const ErrorFailedImg = require('../../../../assets/images/error-review-failed.jpg');
    if (typeof window !== 'undefined') {
      new Image().src = ErrorFailedImg;
    }
  }, []);

为了使用图像,我这样写

<img src="/assets/images/error-review-failed.jpg" />

其他回答

我也遇到过同样的问题,我发现问题出在图像的位置。 不应该将它们保存到src文件夹中,而应该将它们存储在公共目录中并可以直接访问。

赞誉。

当使用Webpack时,你需要需要图像以便Webpack处理它们,这就解释了为什么外部图像加载而内部不加载,所以你需要使用<img src={"/images/ restto .png"} />,而不是<img src={require('/images/image-name.png')} />替换image-name.png,为它们每个正确的图像名称。这样Webpack就能够处理和替换源img。

尝试将server.js中的代码更改为-

app.use(require('webpack-dev-middleware')(compiler, {
      noInfo: true,
      publicPath: config.output.path
    }));

哦,是的,几分钟前我也遇到了同样的问题,这对我来说很有效:

import React from "react" import logo from "../images/logo.png"

export default function Navbar() {
    return(
        <nav>
            {/* <img className="nav--logo" src="../images/logo.png"/> */}
            <img className="nav--logo" src={logo} alt="logo"/>
        </nav>
    ) }

另一种做法是:

首先,安装这些模块:url加载器、文件加载器

使用npm: npm install——save-dev url-loader file-loader

接下来,把这个添加到你的Webpack配置中:

module: {
    loaders: [
      { test: /\.(png|jpg)$/, loader: 'url-loader?limit=8192' }
    ]
  }

limit:字节限制内联文件作为数据URL

你需要安装这两个模块:url加载器和文件加载器

最后,你可以这样做:

<img src={require('./my-path/images/my-image.png')}/>

你可以在这里进一步研究这些加载器:

url-loader: https://www.npmjs.com/package/url-loader

file-loader: https://www.npmjs.com/package/file-loader