我在我的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,所有的图像可以显示相同的路径。


当前回答

将logo放在公共文件夹中,例如public/img/logo.png,然后引用公共文件夹为%PUBLIC_URL%:

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

在构建过程中,上面的%PUBLIC_URL%的使用将被公用文件夹的URL取代。只有公共文件夹中的文件才能从HTML中引用。

与"/img/logo.png"或"logo.png"不同,"%PUBLIC_URL%/img/logo.png"将正确地用于客户端路由和非根公共URL。学习如何通过运行npm run build配置一个非根公共URL。

其他回答

Make an images folder inside src(/src/images) And keep your image in it. Then import this image in your component(use your relative path). Like below- import imageSrc from './images/image-name.jpg'; And then in your component. <img title="my-img" src={imageSrc} alt="my-img" /> Another way is to keep images in public folder and import them using relative path. For this make an image folder in public folder and keep your image in it. And then in your component use it like below. <img title="my-img" src='/images/my-image.jpg' alt="my-img" /> Both method work but first one is recommended because its cleaner way and images are handled by webpack during build time.

您使用的是相对url,相对于当前url,而不是文件系统。你可以通过使用绝对url来解决这个问题

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

但是当您部署到www.my-domain.bike或任何其他站点时,这不是很好。更好的方法是使用相对于站点根目录的url

<img src=“/细节/img/myImage.png”/>

将logo放在公共文件夹中,例如public/img/logo.png,然后引用公共文件夹为%PUBLIC_URL%:

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

在构建过程中,上面的%PUBLIC_URL%的使用将被公用文件夹的URL取代。只有公共文件夹中的文件才能从HTML中引用。

与"/img/logo.png"或"logo.png"不同,"%PUBLIC_URL%/img/logo.png"将正确地用于客户端路由和非根公共URL。学习如何通过运行npm run build配置一个非根公共URL。

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

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

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

我用过这种方法,效果很好

import Product from "../../images/product-icon.png";
import { Icon } from "@material-ui/core";

<Icon>
    <img src={Product} style={{ width: "21px", height: "24px" }} />
</Icon>