react實(shí)現(xiàn)圖片懶加載的三種方式
在 React 中實(shí)現(xiàn)圖片懶加載可以提升頁面的性能,特別是在有大量圖片的頁面中,能避免一次性加載所有圖片導(dǎo)致的性能問題。以下為你介紹幾種常見的實(shí)現(xiàn)方式:
1. 使用 HTML 的 loading="lazy" 屬性
現(xiàn)代瀏覽器原生支持圖片的懶加載,通過給 <img>
標(biāo)簽添加 loading="lazy"
屬性即可實(shí)現(xiàn)。
import React from 'react'; const LazyImage = () => { return ( <img src="https://example.com/image.jpg" alt="Lazy loaded image" loading="lazy" /> ); }; export default LazyImage;
優(yōu)點(diǎn):
- 簡單易用,無需額外的庫。
- 瀏覽器原生支持,兼容性較好。
缺點(diǎn):
- 對于舊版本的瀏覽器可能不支持。
2. 使用 react-lazyload 庫
react-lazyload
是一個(gè)常用的 React 懶加載庫,它可以幫助你輕松實(shí)現(xiàn)圖片懶加載。
npm install react-lazyload
使用示例
import React from 'react'; import LazyLoad from 'react-lazyload'; const LazyImage = () => { return ( <LazyLoad> <img src="https://example.com/image.jpg" alt="Lazy loaded image" /> </LazyLoad> ); }; export default LazyImage;
自定義配置
react-lazyload
提供了一些配置選項(xiàng),例如 threshold
(觸發(fā)加載的閾值)、placeholder
(加載前的占位符)等。
import React from 'react'; import LazyLoad from 'react-lazyload'; const LazyImage = () => { return ( <LazyLoad threshold={200} placeholder={<div>Loading...</div>} > <img src="https://example.com/image.jpg" alt="Lazy loaded image" /> </LazyLoad> ); }; export default LazyImage;
優(yōu)點(diǎn):
- 功能豐富,提供了多種配置選項(xiàng)。
- 兼容性好,支持舊版本的瀏覽器。
缺點(diǎn):
- 需要引入額外的庫,增加了項(xiàng)目的體積。
3. 使用 IntersectionObserver API 手動(dòng)實(shí)現(xiàn)
IntersectionObserver
是一個(gè)原生的 JavaScript API,用于觀察目標(biāo)元素與視口的交叉狀態(tài)??梢岳盟謩?dòng)實(shí)現(xiàn)圖片懶加載。
import React, { useRef, useEffect } from 'react'; const LazyImage = () => { const imgRef = useRef(null); useEffect(() => { const observer = new IntersectionObserver((entries) => { entries.forEach((entry) => { if (entry.isIntersecting) { const img = entry.target; img.src = img.dataset.src; observer.unobserve(img); } }); }); if (imgRef.current) { observer.observe(imgRef.current); } return () => { if (imgRef.current) { observer.unobserve(imgRef.current); } }; }, []); return ( <img ref={imgRef} data-src="https://example.com/image.jpg" alt="Lazy loaded image" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" /> ); }; export default LazyImage;
優(yōu)點(diǎn):
- 無需引入額外的庫,減少項(xiàng)目體積。
- 可以根據(jù)需求進(jìn)行自定義。
缺點(diǎn):
- 代碼實(shí)現(xiàn)相對復(fù)雜。
- 對于舊版本的瀏覽器可能需要使用 polyfill。
到此這篇關(guān)于react實(shí)現(xiàn)圖片懶加載的三種方式的文章就介紹到這了,更多相關(guān)react 圖片懶加載內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
React Form組件的實(shí)現(xiàn)封裝雜談
這篇文章主要介紹了React Form組件的實(shí)現(xiàn)封裝雜談,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-05-05ReactHook使用useState更新變量后,如何拿到變量更新后的值
這篇文章主要介紹了ReactHook使用useState更新變量后,如何拿到變量更新后的值問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03Ant?Design?組件庫之步驟條實(shí)現(xiàn)
這篇文章主要為大家介紹了Ant?Design組件庫之步驟條實(shí)現(xiàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08詳解React Native頂|底部導(dǎo)航使用小技巧
本篇文章主要介紹了詳解React Native頂|底部導(dǎo)航使用小技巧 ,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-09-09淺談redux以及react-redux簡單實(shí)現(xiàn)
這篇文章主要介紹了淺談redux以及react-redux簡單實(shí)現(xiàn),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-08-08React虛擬渲染實(shí)現(xiàn)50個(gè)或者一百個(gè)圖表渲染
這篇文章主要為大家介紹了React虛擬渲染實(shí)現(xiàn)50個(gè)或者100個(gè)圖表渲染的實(shí)現(xiàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06React從react-router路由上做登陸驗(yàn)證控制的方法
本篇文章主要介紹了React從react-router路由上做登陸驗(yàn)證控制的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-05-05