我正在构建一个小的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');
});

当使用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
    }));

另一种做法是:

首先,安装这些模块: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


我开始用Create -react-app构建我的应用程序(参见“创建一个新应用程序”选项卡)。README。附带的Md给出了这个例子:

import React from 'react';
import logo from './logo.png'; // Tell Webpack this JS file uses this image

console.log(logo); // /logo.84287d09.png

function Header() {
  // Import result is the URL of your image
  return <img src={logo} alt="Logo" />;
}

export default Header;

这对我来说非常有效。下面是该README的主文档链接,其中解释了(摘录):

...You can import a file right in a JavaScript module. This tells Webpack to include that file in the bundle. Unlike CSS imports, importing a file gives you a string value. This value is the final path you can reference in your code, e.g. as the src attribute of an image or the href of a link to a PDF. To reduce the number of requests to the server, importing images that are less than 10,000 bytes returns a data URI instead of a path. This applies to the following file extensions: bmp, gif, jpg, jpeg, and png...


有时你可以输入而不是在你的图像位置/src: 试一试

./assets/images/picture.jpg

而不是

../assets/images/picture.jpg

我只是想留下以下内容,以加强上面接受的答案。

除了公认的答案之外,您还可以在Webpack中指定别名路径,这样您就不必担心图像相对于当前所在文件的位置。请看下面的例子:

Webpack file:

module.exports = {
  resolve: {
    modules: ['node_modules'],
    alias: {
      public: path.join(__dirname, './public')
    }
  },
}

Use:

<img src={require("public/img/resto.ong")} />

我也想补充一下@Hawkeye Parker和@Kiszuriwalilibori的回答:

正如这里的文档所指出的,通常最好根据需要导入图像。

然而,我需要动态加载许多文件,这导致我把图像放在公共文件夹(也在README中声明),因为下面的文档建议:

Normally we recommend importing stylesheets, images, and fonts from JavaScript. The public folder is useful as a workaround for a number of less common cases: You need a file with a specific name in the build output, such as manifest.webmanifest. You have thousands of images and need to dynamically reference their paths. You want to include a small script like pace.js outside of the bundled code. Some library may be incompatible with Webpack and you have no other option but to include it as a tag.

希望这能帮助到其他人!如果我需要澄清任何问题,请给我留言。


src={"/images/resto.png"}

以这种方式使用src属性意味着,您的图像将从网站的绝对路径“/images/ restto .png”加载。图像目录应该位于站点的根目录。例子: http://www.example.com/images/resto.png


我正在开发一个使用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" />

在react中加载本地图像的最佳方法如下所示

例如,保持你所有的图像(或任何资产,如视频,字体)在公共文件夹,如下所示。

只需编写<img src='/assets/images/Call.svg' />即可从任何react组件访问Call.svg图像

注意:保持你的资产在公共文件夹确保,你可以从项目的任何地方访问它,只需给'/path_to_image',不需要任何路径遍历'../../'像这样


以下是对我有效的方法。首先,让我们了解这个问题。不能使用变量作为require的参数。Webpack需要知道在编译时要捆绑什么文件。

When I got the error, I thought it may be related to path issue as in absolute vs relative. So I passed a hard-coded value to require like below: <img src={require("../assets/images/photosnap.svg")} alt="" />. It was working fine. But in my case the value is a variable coming from props. I tried to pass a string literal variable as some suggested. It did not work. Also I tried to define a local method using switch case for all 10 values (I knew it was not best solution, but I just wanted it to work somehow). That too did not work. Then I came to know that we can NOT pass variable to the require.

作为一种解决方法,我已经修改了数据中的数据。Json文件来限制它只是我的图像的名字。这个图像名称是来自于道具的字符串文字。我将它连接到硬编码的值,如下所示:

import React from "react";

function JobCard(props) {  

  const { logo } = props;
  
  return (
      <div className="jobCards">
          <img src={require(`../assets/images/${logo}`)} alt="" /> 
      </div>
    )
} 
  

标识中包含的实际值将来自数据。Json文件,会引用一些图像名称,比如photosnap。svg。


您必须先导入映像,然后再使用它。这对我很管用。


import image from '../image.png'

const Header = () => {
   return (
     <img src={image} alt='image' />
   )
}



我将分享我在一个创建-反应-应用程序项目中工作的解决方案:

在同一个images文件夹中包含一个js文件,导出所有的图像,在组件中,你需要的图像导入图像并使用它:),Yaaah就是它,让我们详细看看

文件夹结构与JS文件

// js file in images folder
export const missing = require('./missingposters.png');
export const poster1 = require('./poster1.jpg');
export const poster2 = require('./poster2.jpg');
export const poster3 = require('./poster3.jpg');
export const poster4 = require('./poster4.jpg');

你可以在你的组件中导入: import {missing, poster1, poster2, poster3, poster4} from '../../assets/indexImages';

你现在可以使用这个作为SRC to image标签。

编码快乐!


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

赞誉。


通过一个简单的导入,你可以在React中访问图像

import logo from "../images/logo.png";
<img src={logo}/>

一切都解决了!只是一个简单的修复=)


以下是我的做法: 如果你使用npx create-react-app来设置你的react,你需要从你想要使用它的组件的文件夹中导入图像。这只是从它们的文件夹导入其他模块的方法。

所以,你需要写:

import myImage from './imageFolder/imageName'

然后在JSX中,您可以有这样的内容:<image src = {myImage} />

请看下面的截图:


使用默认属性:

<img src={require(`../../assets/pic-${j + 1}.jpg`).default} alt='pic' />

编辑(进一步解释):

Require返回一个对象:

Module {default: "/blah.png", __esModule: true, Symbol(Symbol.toStringTag): "Module"}

然后可以从默认属性中找到图像的路径


我也面临着同样的问题,我已经想出了这个解决方案,它就像魔法一样有效。 src={${window.location.origin.toString()}/${这里的图像名称}}


我是这样解决的。

所以我只有在映射多个图像的数组时才会遇到这个问题。通常使用import import artist3 from './../../ assets/images/cards_images/artists/artist3.png';它工作得很好,但问题是当循环多个图像形成一个数组。

我分享的是我用来解决这个问题的方法。

以前-----我使用imageurl: 'your_image_url.png'

------在我的数组中,我将imageurl: require('your_image_url。png')

  const artists = [
{firstname: 'Trevor', lastname: 'Bowman', imageurl: require('./../../assets/images/cards_images/artists/artist1.png') },
{firstname: 'Julia', lastname: 'Deakin', imageurl: require('./../../assets/images/cards_images/artists/artist2.png') },
{firstname: 'Stewart', lastname: 'Jones', imageurl: require('./../../assets/images/cards_images/artists/artist3.png') },
{firstname: 'Arsene', lastname: 'Lupin', imageurl: require('./../../assets/images/cards_images/artists/artist1.png') },

 ]

现在,在另一个组件中,我使用这些数据来循环我绑定到image src的艺术家,如下所示

<img src={artist.imageurl.default} className="artists__content——image br-08" alt={'img'+index} />

因为当你输入require()时,你得到的是Module对象,它有一个默认属性,它有我们的url(截图附在下面)

所以。default这个东西是在require()之后访问url的一个额外的东西


首先,检查您是否已经指定了图像的当前位置,如果您在设置正确路径时遇到困难,您可以使用此方法。 第二,像导入任何js文件一样导入图像,就像这样

import x from "../images/x.png";
<img src={x}/>

你可以给x起任何名字!!


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

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>
    ) }

它已经为我解决了,只需从公共图像的路径中删除“点”。


试试这个

如果你的图像SRC是

src="dist/img/logo.jpg"

添加. ./喜欢

src="../dist/img/logo.jpg"