React.js上img的正确路径


135

我的React项目中的图片有问题。的确,我一直认为src属性的相对路径是建立在文件架构上的

这是我的文件架构:

components
    file1.jsx
    file2.jsx
    file3.jsx
container
img
js 
... 

但是我意识到路径是建立在URL上的。在我的组件之一(例如到file1.jsx中)中,我有以下内容:

localhost/details/2
<img src="../img/myImage.png" /> -> works

localhost/details/2/id
<img src="../img/myImage.png" /> -> doesn't work, images are not displayed

如何解决这个问题?我希望在react-router处理的任何形式的路由中,所有图像都可以使用相同的路径显示。


1
只需直接指向图片,就不要使用../等等
omarjmh

4
您需要使用require。请在SO上阅读此答案以获取更多信息。
今天

希望这个答案可以帮助您解决本地图像问题
mokesh moha,

Answers:


73

您使用的是相对网址,相对于当前网址,而不是文件系统。您可以使用绝对网址来解决此问题

<img src ="http://localhost:3000/details/img/myImage.png" />

但这不适用于您部署到www.my-domain.bike或任何其他站点的情况。最好使用相对于网站根目录的网址

<img src="/details/img/myImage.png" />


1
谢谢,我想强调/前面的details(vs ./details等,对于其他可能将两者混为一谈的人)。
user1322092 '16

1
即使对我来说,它也不起作用。我使用reactjscordova和使用ES5作为eslint
Jimit特尔

尽管此解决方案和claireablani的解决方案都可以工作,但create-react-app文档建议的是claireablani的解决方案。他们列出了将资源发布到公共facebook.github.io/create-react-app/docs/…
Athir Nuaimi

@ user1322092是正确的。请记住/images/popcorn.png,不是./images/popcorn.png。为我工作了所有的路线和东西。
Nuhman

335

create-react-app图像的相对路径中似乎不起作用。相反,您可以导入图像:

import logo from './logo.png' // relative path to image 

class Nav extends Component { 
    render() { 
        return ( 
            <img src={logo} alt={"logo"}/> 
        )  
    }
}

15
例如在create-react-app中的json文件中引用的动态图像呢?
zok

2
@zok我想您应该从JSON文件中导出变量,然后将变量导入组件中。然后您可以照常引用它。例如,导出const my_src = variable_here,从my_file导入{my_src},而src = {my_src}。
claireablani

1
import './styles/style.less'; **import logo from './styles/images/deadline.png';**当图像存在且路径正确时,找不到第二行模块上的错误。
Hitendra

这种方法也被证实由survive.js如果你想看看核心的WebPack笔者的方法之一。他还提到您可以使用babel-plugin-transform-react-jsx-img-import来解决每次引用图像时都必须导入图像的问题。
安德烈(Andre)

2
不是这个,它只能解决图像问题,而不能解决路径问题。.Dima Gershman的答案是对任何文件img或其他文件的路径的实际反应解决方案
Sami,

130

如果您使用create-react-app创建项目,则可以访问您的公用文件夹。因此,您需要将image文件夹添加到公用文件夹中。

公众/图片/

<img src="/images/logo.png" />


我正要提一个问题,但是这个答案解决了我的问题!!!应该标记为答案。谢谢!!!+1
Si8,19年

它为我工作。请记住,如果您将新图像添加到公共目录,则需要重新启动应用程序。
awasik

这确实是一种处理情况的快速方法,但是只有在不需要相对URL的情况下,它才有效。例如,如果您通过提供服务www.example.com/react-app,公用文件夹将显示在www.example.com上,而不显示react-app。这可能很麻烦,因此可接受的答案是正确的答案。资料来源:添加资产使用公用文件夹
Alexandru Pirvu

44

随着create-react-app公共文件夹(与index.html的 ...)。如果将“ myImage.png”放在此处,在img子文件夹下说,则可以通过以下方式访问它们:

<img src={window.location.origin + '/img/myImage.png'} />

4
应该将其标记为正确答案,因为它实际上是针对任何文件的所有类型的路径的reactjs解决方案
Sami,

我不明白您为什么认为这是正确的答案。我只是尝试了这个答案,克莱尔布拉尼(Claireblani)的答案和克莱尔(Claire)的答案奏效了,但没有奏效。仅当图像位于公用文件夹中时,此答案才有效。我的图像应该放在公用文件夹中吗?@Sami
Maderas

是的,@ Maderas首先要解决的是,这个答案是否与接受的答案相同=>仅删除{}和基本URL,您可以简单地使用src ='/图像的相对路径'或src ='图像的绝对路径'答案是它可以容纳任何图像的可变路径
Sami,

到目前为止,对我来说还算是魅力。什么也没做!我几乎尝试了所有事情。谢谢!
玛丽亚·坎贝尔

32
  1. 在src(/ src / images)内创建一个图像文件夹,并将图像保留在其中。然后将此图像导入组件中(使用相对路径)。像下面一样

    import imageSrc from './images/image-name.jpg';

    然后在您的组件中。

    <img title="my-img" src={imageSrc} alt="my-img" />

  2. 另一种方法是将图像保留在公用文件夹中,并使用相对路径导入它们。为此,在公用文件夹中创建一个图像文件夹,并将图像保留在其中。然后在您的组件中使用它,如下所示。

    <img title="my-img" src='/images/my-image.jpg' alt="my-img" />

    两种方法都可以使用,但推荐第一种方法,因为它的更简洁的方式和图像在构建期间由webpack处理。


2
这帮助了我:)
拉斐尔

这行不通,在开始时需要用斜杠(/)表示相对路径,例如:“ /images/pitbull-mark.png”
Jeremy Rea

您是否尝试过答案中提到的那个?这也应该起作用。
Mustkeem K

26

就我而言,以下代码也可以工作。

<img src={require('../logo.png')} alt="logo" className="brand-logo"/>

1
那对我有用。如果您不想将图像存储在公用文件夹中,则此方法有效
Mr_LinDowsMac

13

总而言之,一些较旧的答案行不通,另一些则不错,但不会解释主题。

如果图片在“公共”目录中

例: \public\charts\a.png

在html中:

<img id="imglogo" src="/charts/logo.svg" />

在JavaScript中:

动态创建图像到新的img:

var img1 = document.createElement("img");  
img1.src = 'charts/a.png';  

将图片动态设置为ID为'img1'的现有img:

document.getElementById('img1').src = 'charts/a.png';

如果图像位于“ src”目录中:

例: \src\logo.svg

在JavaScript中:

import logo from './logo.svg';  
img1.src = logo;  

在jsx中:

<img src={logo} /> 

3

按照官方用法说明将文件加载器npm添加到webpack.config.js中,如下所示:

config.module.rules.push(
    {
        test: /\.(png|jpg|gif)$/,
        use: [
            {
                loader: 'file-loader',
                options: {}
            }
        ]
    }
);

为我工作。


3

将图像导入组件中

import RecentProjectImage_3 from '../../asset/image/recent-projects/latest_news_3.jpg'

并将图像名称src = {RecentProjectImage_3}上的图像名称作为对象

 <Img src={RecentProjectImage_3} alt="" />

2

一位朋友向我展示了如何执行以下操作:

当请求图像的文件(例如“ example.js”)在文件夹树结构中与文件夹“ images”处于同一级别时,“ ./”起作用。


1

将徽标放在您的公用文件夹下,例如public / img / logo.png下,然后将公用文件夹称为%PUBLIC_URL%:

<img src="%PUBLIC_URL%/img/logo.png"/>

上面的%PUBLIC_URL%的使用将public在构建期间替换为文件夹的URL 。publicHTML只能引用文件夹中的文件。

与“ /img/logo.png”或“ logo.png”不同,“%PUBLIC_URL%/ img / logo.png”可以在客户端路由和非根公共URL上正常使用。了解如何通过运行来配置非根公共URL npm run build

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.