,但该图像没有显示。此外,我无权访问 webpack config 文件,因为该项目是使用官方的 create......" /> ,但该图像没有显示。此外,我无权访问 webpack config 文件,因为该项目是使用官方的 create......"> ,但该图像没有显示。此外,我无权访问 webpack config 文件,因为该项目是使用官方的 create......" />
ChatGPT解决这个技术问题 Extra ChatGPT

如何在 React 中引用本地图像?

如何从本地目录加载图像并将其包含在 reactjs img src 标记中?

我在与我的组件相同的文件夹中有一个名为 one.jpeg 的图像,我在我的 render 函数中尝试了 <img src="one.jpeg" /><img src={"one.jpeg"} />,但该图像没有显示。此外,我无权访问 webpack config 文件,因为该项目是使用官方的 create-react-app 命令行实用程序创建的。

更新:如果我首先使用 import img from './one.jpeg' 导入图像并在 img src={img} 中使用它,则此方法有效,但我有很多图像文件要导入,因此我想以 img src={'image_name.jpeg'} 的形式使用它们。

React won't load local images 的可能重复项
我实际上有一个类似的问题,我的图像被导入到 index.jsx 文件中,我在 webpack 中有加载器,编译面工作正常,因为确实在我的 server/public/js 中创建了图像的副本带有随机数的文件夹,并且它的正确路径位于捆绑器中,但我无法可视化图像。也很奇怪,它是在 server/public/js 中生成的,而不是在我写入 index.js 时在 server/public/img 中生成的

W
W12345

首先将 src 包装在 {}

那么如果使用Webpack;而不是:<img src={"./logo.jpeg"} />

您可能需要使用要求:

<img src={require('./logo.jpeg')} />

另一种选择是首先导入图像:

import logo from './logo.jpeg'; // with import

或者 ...

const logo = require('./logo.jpeg); // with require

然后插上...

<img src={logo} />

我会推荐这个选项,尤其是在您重用图像源的情况下。


注意不要忘记相对 url 开头的 .。应该是 <img src={require('./one.jpeg')} />
这些方法是否会影响性能,例如图像的加载时间?如果是这样,哪一个在性能方面更好?
@انعامالرحمٰن - 这里有一些评论stackoverflow.com/questions/31354559/…,但 TL;DR 没有,没有性能差异。
这里遗漏了这样一个事实,即至少在 webpack 4 中,要使用的加载器是 url-loader 而不是文件一个或上一个
使用 <img src={require('./logo.jpeg').default} /> 对我有用
M
Marcello B.

最好的方法是先导入图像,然后再使用它。

import React, { Component } from 'react';
import logo from '../logo.svg';
export default class Header extends Component {
  render() {
    return (
      <div className="row">
        <div className="logo">
          <img src={logo} width="100" height="50" />
        </div>
      </div>
    );
  }
} 

为什么这是最好的方法?
如果您需要在同一个组件中重用,这是最好的方法,您可以在没有路径引用的情况下使用它。这是一个很好的做法@JasonLeach
Jason Leach 这是更清洁的方式
如果你从 logo 中得到类似 [object object] 的东西,那么你需要提取源代码:
b
barbsan

在公用文件夹中创建一个资产文件夹并相应地放置图像路径。

<img className="img-fluid" 
     src={`${process.env.PUBLIC_URL}/assets/images/uc-white.png`} 
     alt="logo"/>

谢谢,这在文件夹中可能存在或不存在图像的情况下对我很有用,因为它们是根据显示的资源动态导入的。
为什么这行得通?无论我将图像文件夹放在哪里,它都不起作用。但现在我把它放在一个名为“assets”的文件夹中,就像你说的那样,它有效吗?
谢谢你。我以前怎么没想到!好提示。
这工作得很好!
我在获取动态数据 <img className='m-auto ' src={`${process.env.REACT_APP_BASEURL}${item.image}`} alt="Avatar" style={{ width: 100 + 'px' }} /> 时也在做同样的事情,但我收到错误 Not allowed to load local resource
Y
Yasiru Padmasiri

你需要使用 require 和 .默认

 <img src={require('./logo.jpeg').default} />

这行得通! .default 的目的是什么?
@Pythoner 看到这个问题stackoverflow.com/questions/43247696/…
S
Shubham Khatri

您需要将图像源路径包装在 {}

<img src={'path/to/one.jpeg'} />

如果使用 webpack,则需要使用 require

<img src={require('path/to/one.jpeg')} />

A
Abdul Moiz

导入图像的最佳方式是...

import React, { Component } from 'react';

// image import
import CartIcon from '../images/CartIcon.png';

 class App extends Component {
  render() {
    return (
     <div>
         //Call image in source like this
          <img src={CartIcon}/>
     </div>
    );
  }
}

不支持 src/ 之外的相对导入。为此,您必须将图像保存在 src/ 中,不建议这样做
@toing_toing 为什么不建议将图像保存在 src 中?官方文档中有这种情况的示例:facebook.github.io/create-react-app/docs/…
增加了 webpack 包的大小和编译时间,每次更改资产时都需要重新编译并增加加载时间。我宁愿把它放在公共文件夹中并通过 url 链接。
@toing_toing 你说你会'宁愿......'但你没有说如何做到这一点。
T
Tomer Shetah
const photo = require(`../../uploads/images/${obj.photo}`).default;
...
<img src={photo} alt="user_photo" />

请,当您回答问题时,请尝试解释您的建议和原因,而不是简单地删除一行可能被 OP 理解或不理解的代码。您可能还想参考 How do I write a good answer?
您好,欢迎来到 SO!虽然此代码可能会回答问题,但提供有关它如何和/或为什么解决问题的额外上下文将提高答案的长期价值。请阅读tourHow do I write a good answer?
M
Martin Brisiak

将您的图像放在公用文件夹中或在您的公用文件夹中创建一个子文件夹并将您的图像放在那里。例如:

您将“completative-reptile.jpg”放在公用文件夹中,然后您可以访问它

src={'/completative-reptile.jpg'}

你把 completative-reptile.jpg 放在 public/static/images,然后你可以访问它

src={'/static/images/completative-reptile.jpg'}

当您尝试将项目置于子文件夹下时,这不起作用
L
Lucas Souza

我遇到了同样的问题,经过研究,我设法通过将 JSON 数据放入 JS 中的常量来解决它,这样我就能够导入图像并且只通知 JSON 对象中的导入。例子:

import imageImport from './image.png';

export const example = [
  {
    "name": "example",
    "image": imageImport
  }
]

<Image source={example.image}/>

你是救世主兄弟。我将导入的项目包装在花括号 {} 中,并让它们成为一个对象(在不知不觉中),但是在看到你回答之后,我的问题就解决了。删除了花括号和 BOOM!!谢谢你,卢卡斯 :)
J
Joan Gavelán

对于想要使用多张图像的人来说,一张一张地导入它们当然是个问题。解决方案是将图像文件夹移动到公用文件夹。因此,如果您在 public/images/logo.jpg 中有一张图片,您可以这样显示该图片:

function Header() {
  return (
    <div>
      <img src="images/logo.jpg" alt="logo"/>
    </div>
  );
}

是的,不需要在源代码中使用 /public/。

进一步阅读:https://daveceddia.com/react-image-tag/


C
Community

你有两种方法可以做到这一点。

第一的

导入类顶部的图像,然后像这样在 <img/> 元素中引用它

从'react'导入反应,{组件};从'../path/myImg.svg'导入myImg;导出默认类 HelloImage 扩展组件 { render() { return } }

第二

您可以像这样在 <img/> 元素中使用 require('../pathToImh/img') 直接指定图像路径

从'react'导入反应,{组件};导出默认类 HelloImage 扩展组件 { render() { return } }


K
Kai Sheng Tung

我找到了另一种实现方式(这是一个功能组件):

const Image = ({icon}) => {
   const Img = require(`./path_to_your_file/${icon}.svg`).ReactComponent;
   return <Img />
}

希望能帮助到你!


R
Rahul Sarma

第 1 步:import MyIcon from './img/icon.png'

第2步 :

<img
    src={MyIcon}
    style={{width:'100%', height:'100%'}}
/>    

C
Community

首先,您必须导入图像

import logo from './logo.jpeg'; // with import

然后插上...

<img src={logo} />

而已。


S
Shem

为了使 require 方法起作用,我必须添加“.default”,如下所示:

<img src={require('./path/to/image.svg').default} />

没错,那是因为您需要 svg 图像。
K
Kiszuriwalilibori

我的回答与 Rubzen 的回答基本相似。顺便说一句,我使用图像作为对象值。两个版本对我有用:

{
"name": "Silver Card",
"logo": require('./golden-card.png'),

或者

const goldenCard = require('./golden-card.png');
{ "name": "Silver Card",
"logo": goldenCard,

没有包装器 - 但这也是不同的应用程序。

我还检查了“导入”解决方案,并且在少数情况下它可以工作(这并不奇怪,这在 React 的 App.js 模式中应用),但不是我上面的情况。


d
dyedwiper

正如评论中提到的,您可以将图像放在公共文件夹中。 Create-React-App 的文档中也对此进行了说明:https://create-react-app.dev/docs/using-the-public-folder/


实际上不需要比文档中的一行更多的代码<img src={process.env.PUBLIC_URL + '/img/logo.png'} />
J
James F. Thomas

实际上,我只是遇到了同样的问题,如果您将图像文件从 ./public 目录移动到 ./src 目录,您可以导入或要求,并且两者都将呈现。

https://i.stack.imgur.com/BWmp7.png

https://i.stack.imgur.com/j0Kls.png

https://i.stack.imgur.com/ToyP1.png

https://i.stack.imgur.com/bLqG4.png

我还测试了组件中的 imagesrc 属性,它们都有效。

在我尝试使用 ../ 指示 jpg 所在的确切文件夹后,我收到了一个可用的错误,让我可以轻松修复。

https://i.stack.imgur.com/xaor3.png

https://i.stack.imgur.com/7Rodl.png


D
Divyesh Bhalani

如果您不想将图像放在公用文件夹中,请使用以下语法

 src={require("../../assets/images/img_envelope.svg").default}

R
Rubzen

我用过这种方式,而且效果很好……希望对你有用。

const logofooter = require('../../project-files/images/logo.png');

 return(
 <div className="blockquote text-center">
            <img src={logofooter} width="100" height="80" />
 <div/>
);

A
Agilanbu
import React from "react";   
import image from './img/one.jpg';

class Image extends React.Component{
  render(){
    return(
      <img className='profile-image' alt='icon' src={image}/>
   );
  }
}

导出默认图片


佚名

您可以创建一个名为 images.js 的文件并在其中引用您的所有应用程序资源,然后将该组件导入您需要显示图像的所有其他组件中


T
Tanzeel Ahmed

我想导入多个图像并将它们传递给不同的组件。事实证明,我只需要导入多个图像一次,我可以通过传递一个道具在任何组件中使用它们。

import whiskey from './img/whiskey.jpg';
import hazel from './img/hazel.jpg';
import tubby from './img/tubby.jpg';

让我们做一个对象。

dog = [
   { name: "Whiskey", src: whiskey }, 
   // ...
]

并显示图像

<img src={dog.src}></img>

a
alexander.polomodov
import image from './img/one.jpg';

class Icons extends React.Component{
    render(){
      return(
        <img className='profile-image' alt='icon' src={image}/>
    );
    }
}
export default Icons;

A
Anuj Tanwar

好吧,你们都知道现在提出的问题的答案,但是我将这个答案发布给你们大多数人在阅读其他答案后可能想知道的问题:

问题:我到底要如何导入 50 或 100 个文件:)

答:我建议您制作一个 api (.json) 文件,并在其中放置所有图像的链接并调用 api。这是迄今为止非常轻松地批量导入文件的最佳方式,尽管这需要一些时间和知识,如果您还不知道的话。


我建议您将您的场景作为一个单独的问题发布,然后发布您自己的答案。一定要链接到这个问题。