React JS 中的条件渲染和图像路径

IT技术 javascript reactjs import module path
2021-05-18 05:51:01

一瞬间我真的不明白。假设我有一个组件,它有条件地呈现这样的数据:

<div>
{isLoading ? <img src="../pathname/img.jpg" alt="loading" /> : <Page />}
</div>

图像不会以这种方式呈现,显示损坏的文件图标。但是,如果我导入相同的图像,它就可以正常工作:

import loadingImage from "../pathname/img.jpg"
<div>
{isLoading ? <img src={loadingImage} alt="loading" /> : <Page />}
</div>

我使用npm start并且我的编辑器是 VS Code。您知道导入它的原因可能是什么,而不仅仅是提供路径名,src即使路径相同?在第一个示例中,我提供的路径和文件名是 100% 正确的。

2个回答

发生这种情况是因为您的图像可能不在public文件夹内。

您可以将资产添加到公用文件夹,然后您就可以访问它。

例如,对于下面的代码,您将需要一个pathname文件夹,文件夹中包含 img.jpg public

<img src="../pathname/img.jpg" alt="loading" />

但最好的方法是在 JavaScript 文件中使用导入。这种机制提供了许多好处:

  • 脚本和样式表被缩小并捆绑在一起以避免额外的网络请求。
  • 文件包含在捆绑包中
  • 缺少文件会导致编译错误,而不是用户的 404 错误。
  • 结果文件名包含内容哈希,因此您无需担心浏览器缓存其旧版本。

使用import,当页面呈现时,您将在图像中看到类似这样的内容:src="/static/media/img.xxxxx.jpg"那是因为使用 import 告诉 webpack 将该文件包含在包中。

您可以在此处查看更多信息 -添加图像字体和文件并在此处使用公共文件夹

你错过了大括号。这将起作用:

<div>
  {isLoading ? <img src={'../pathname/img.jpg'} alt='loading' /> : <Page />}
</div>