javascript - React JS 中的条件渲染和图像路径
问题描述
一瞬间真的搞不懂 假设我有一个组件,它有条件地呈现这样的数据:
<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% 正确的。
解决方案
发生这种情况是因为您的图像可能不在public
文件夹内。
您可以将资产添加到公用文件夹,然后您就可以访问它。
例如,对于下面的代码,您将需要一个pathname
包含 img.jpg 的public
文件夹。
<img src="../pathname/img.jpg" alt="loading" />
但最好的方法是在 JavaScript 文件中使用 import。这种机制提供了许多好处:
- 脚本和样式表被缩小并捆绑在一起,以避免额外的网络请求。
- 文件包含在包中
- 缺少文件会导致编译错误,而不是为您的用户带来 404 错误。
- 结果文件名包含内容哈希,因此您无需担心浏览器缓存其旧版本。
使用import
,当页面被渲染时,您将在图像中看到类似这样的内容:src="/static/media/img.xxxxx.jpg"
。那是因为使用 import 告诉 webpack 将该文件包含在包中。
推荐阅读
- c++ - (C++) 在 linux 上编译 windows 时如何使用库?
- python - 一次编辑多行
- python - Django - 如何运行连续表单?
- sql - 如何使用聚合建模 1:N 关系?
- java - 在循环中的不同行上从 Scanner 读取多个 HashSet
- git - 如何阻止 github 修改我的文件(在工作流程中)?
- list - 我想查找列表列表中的列表是否有关键字。如果是,我想打印列表。我该怎么办?
- laravel - Laravel 应用程序与子域上的 laravel 应用程序
- php - 此路由不支持 GET 方法。支持的方法:POST。但是方法已经发布了
- svd - 从对称矩阵的特征分解计算奇异向量