公共文件夹中的 ReactJS 和图像

IT技术 javascript reactjs
2021-02-08 06:32:17

我是 ReactJS 的新手,我想在组件中导入图像。这些图像位于 public 文件夹内,我不知道如何从 react 组件访问该文件夹。

有任何想法吗 ?

编辑

我想在 Bottom.js 或 Header.js 中导入图像

结构文件夹是:

在此处输入图片说明

我不使用 webpack。我是不是该 ?

编辑 2

我想使用 webpack 加载图像和其余资产。所以在我的 config 文件夹中,我有以下文件:

在此处输入图片说明

我需要在哪里添加图像的路径以及如何添加?

谢谢

6个回答

你不需要任何 webpack 配置。

在您的组件中,只需提供图像路径。默认情况下,react 会知道它在公共目录中。

<img src="/image.jpg" alt="image" />
是的@YuvalLevy。
2021-03-20 06:32:17
如果图像在公共文件夹内的某个文件夹中,会反应知道找到它吗?
2021-03-31 06:32:17
这是最好的方法,因为 process.env.PUBLIC_URL 是相对路由,对于嵌套路由会出错。最好使用答案中指定的以斜杠开头的绝对路由...
2021-04-09 06:32:17
这对我有用。只有我将图像复制到公共目录。React 自动解析路径。
2021-04-12 06:32:17
也为我工作。如此简单的解决方案,让我想起了过去的美好时光。
2021-04-13 06:32:17

要在公共场合引用图像,我知道有两种方法可以直接做到这一点。一个就像上面来自 Homam Bahrani 的一样。

使用

    <img src={process.env.PUBLIC_URL + '/yourPathHere.jpg'} /> 

既然这有效,你真的不需要其他任何东西,但是,这也有效......

    <img src={window.location.origin + '/yourPathHere.jpg'} />
它没有在控制台中显示任何错误,但图像显示为默认图像图标,而不是我导入的图像。你说的两种情况我都试过了。请帮帮我。谢谢 !
2021-03-20 06:32:17

react 文档在文档中很好地解释了这一点,您必须使用process.env.PUBLIC_URL放置在公共文件夹中的图像。这里获取更多信息

return <img src={process.env.PUBLIC_URL + '/img/logo.png'} />;
此外,这适用于使用 create react app 构建的应用程序
2021-03-23 06:32:17
是的,对于 src 目录层次结构之外的动态图像。静态的,如徽标或背景,可以通过导入方法访问。
2021-04-03 06:32:17
它没有在控制台中显示任何错误,但图像显示为默认图像图标,而不是我导入的图像。请帮帮我。
2021-04-12 06:32:17

1- 如果您使用 webpack 进行配置,那很好,但您可以简单地使用图像路径,然后react会发现它在公共目录中。

<img src="/image.jpg">

2- 如果您想使用 webpack,这是 React 中的标准做法。您可以在 webpack.config.dev.js 文件中使用这些规则。

module: {
  rules: [
    {
      test: /\.(jpe?g|gif|png|svg)$/i,
      use: [
        {
          loader: 'url-loader',
          options: {
            limit: 10000
          }
        }
      ]
    }
  ],
},

然后您可以在react组件中导入图像文件并使用它。

import image from '../../public/images/logofooter.png'

<img src={image}/>

你应该在这里使用 webpack 来让你的生活更轻松。在您的配置中添加以下规则:

const srcPath = path.join(__dirname, '..', 'publicfolder')

const rules = []

const includePaths = [
  srcPath
]
    // handle images
    rules.push({
      test: /\.(png|gif|jpe?g|svg|ico)$/,
      include: includePaths,
      use: [{
        loader: 'file-loader',
        options: {
          name: 'images/[name]-[hash].[ext]'
        }
      }

在此之后,您可以简单地将图像导入到您的 React 组件中:

import myImage from 'publicfolder/images/Image1.png'

使用 myImage 如下:

<div><img src={myImage}/></div>

或者如果图像被导入到组件的本地状态

<div><img src={this.state.myImage}/></div> 
@Umesh 我更喜欢用 Webpack 来做。所以你说我必须在配置中添加规则但是哪个文件?我有 path.js、polyfills.js、webpack.config.dev.js、webpack.config.prod.js 和 webpackDevServer.config.js。我将编辑问题以便你们所有人都可以看到结构。谢谢
2021-03-17 06:32:17
@Aceconhielo,您应该将其包含在 webpack.config.dev.js 和 webpack.config.prod.js 中
2021-03-27 06:32:17
我怀疑您是否需要 webpack 才能导入资源。
2021-04-05 06:32:17
@fshock,我说过这样可以更轻松地完成任务。
2021-04-13 06:32:17