我正在尝试将延迟加载添加到我的react应用程序中,因为我有超过200个图像,这些图像在初始加载时并不需要。如果我延迟加载图像,这是否意味着直到屏幕上需要它们时才加载它们?
我目前正在将4组大约50张图片导入到.js文件中,然后将它们添加到对象中,以便它们可以在我的组件中动态使用。看起来像这样。。
// SportImages.js file
import Football from './images/football.png
import Cricket from './images/cricket.png
import Soccer from './images/soccer.png
... // another 50 or so imports
export default {
Football,
Cricket,
Soccer,
... // another 50 or so files
}
// and then in my component
cards.map(x => {
return (
<img src={SportImages[x.image_ref]} />
)
})
所以我的问题是,如果我想延迟加载每个图像,我应该在组件文件还是在主图像文件中使用延迟加载?
4条答案
按热度按时间p3rjfoxz1#
您可以将
loading
属性添加到图像元素中以延迟加载图像。有关此属性的完整解释者指南可以在web.dev上找到。在您的情况下,它可能看起来如下所示:
您还应该确保指定
width
和height
属性,以便浏览器可以使用正确的尺寸将元素放置在页面上。bf1o4zei2#
您可以使用这个名为react-lazy-load-image-component的库导入LazyLoadImage组件,然后使用它渲染图像
您还可以在延迟加载图像时添加效果。您可以在这里查看库的文档https://www.npmjs.com/package/react-lazy-load-image-component
im9ewurl3#
loading='lazy'
属性不支持Safari试试这个包:
示例:
xxe27gdn4#
截至2023年,所有主流浏览器都支持
img
标签(caniuse)上的loading="lazy"
属性,这使得它成为实现图像延迟加载的最简单方法。但是,由于bug in Firefox,为了使其在Firefox中工作,
loading
属性必须放在src
属性之前。所以,套用Jon Koops的答案,直到Firefox中的bug被解决,这是一个可以在Firefox,Chrome和Safari上工作的例子:
如果将
loading="lazy"
放在src
属性之后,延迟加载在Chrome中有效,但在Firefox中无效。