react-visible-observer:一个超级简单的滚动加载 npm 库

本文主要是介绍react-visible-observer:一个超级简单的滚动加载 npm 库,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

随着现代网页应用的复杂性增加,懒加载无限滚动已经成为提升用户体验和性能优化的重要技术。然而,许多现有解决方案要么过于复杂,要么性能欠佳。 react-visible-observer npm 库是一个简单而高效的解决方案,旨在简化这些功能的实现。本文将详细介绍如何在你的 React 项目中集成该库,实现轻松的基于滚动的加载。

什么是 react-visible-observer

react-visible-observer 是一个轻量级的 React 钩子,它利用 Intersection Observer API 提供可见性检测。它允许你在元素进入或退出视口时执行回调,非常适合实现懒加载、无限滚动和其他基于可见性的行为。

主要特点:

  1. 易于使用:通过一个简单的钩子简化了 Intersection Observer API。
  2. 灵活性:可自定义的 root、root margin 和 threshold 选项。
  3. 高性能:高效地观察多个元素,性能影响最小。
  4. 可扩展性:无缝处理单个和多个元素。

安装

要开始使用 react-visible-observer,通过 npm 安装:

npm install react-visible-observer

或者,如果你更喜欢使用 Yarn:

yarn add react-visible-observer

基本用法

让我们通过一个简单的例子来说明 react-visible-observer 的工作原理。我们将实现一个图像列表的懒加载。

  1. 设置钩子
import React, { useRef } from 'react';
import useIntersectionObserver from 'react-visible-observer';const LazyLoadImages = () => {const imagesRef = useRef([]);// 当元素可见时,设置图片的 src 属性const onVisibilityChange = (isVisible, entry) => {if (isVisible) {const img = entry.target;img.src = img.dataset.src;}};// 使用 Intersection Observer 钩子useIntersectionObserver(imagesRef, onVisibilityChange);const imageUrls = ['image1.jpg','image2.jpg',// 添加更多图像 URL];return (<div>{imageUrls.map((url, index) => (<imgkey={index}data-src={url}ref={(el) => (imagesRef.current[index] = el)}  // 将每个图片元素的引用存储在 imagesRef 中alt="Lazy Loaded"style={{ width: '100%', height: 'auto' }}/>))}</div>);
};export default LazyLoadImages;
  1. 自定义选项

你可以自定义观察器选项以适应你的需求。例如,调整 threshold 和 root margin:

const options = {root: null,rootMargin: '0px 0px 50px 0px',threshold: 0.1,
};useIntersectionObserver(imagesRef, onVisibilityChange, null, options);
  1. root:定义观察器的根元素,即作为视口检测的参考容器。如果不设置或为 null,则默认使用浏览器视窗。

    root: document.getElementById('scrollArea') // 使用指定的容器作为观察区域。
    
  2. rootMargin:指定根元素的边界,用来扩展或缩小观察区域的大小,格式为 top right bottom left。该设置可以让元素在视图内外一定距离时触发。

    rootMargin: '0px 0px 50px 0px' // 设置观察区域比实际可视区域提前50像素触发。
    
  3. threshold:决定目标元素可见的比例,触发回调的阈值。可以是单个数值或一个数组,表示多个阈值。

    threshold: [0.1, 0.5, 0.9] // 当元素可见度达到10%、50%和90%时触发。
    

无限滚动

react-visible-observer 也可以用于实现无限滚动。下面是一个快速示例:

import React, { useState, useRef, useCallback } from 'react';
import useIntersectionObserver from 'react-visible-observer';const InfiniteScrollList = () => {const [items, setItems] = useState(Array.from({ length: 20 }));const loaderRef = useRef(null);const loadMoreItems = useCallback(() => {setItems((prevItems) => [...prevItems,...Array.from({ length: 20 }),]);}, []);const onVisibilityChange = (isVisible) => {if (isVisible) {loadMoreItems();}};useIntersectionObserver(loaderRef, onVisibilityChange);return (<div>{items.map((_, index) => (<div key={index} style={{ height: '100px', border: '1px solid black' }}>Item {index + 1}</div>))}<div ref={loaderRef} style={{ height: '100px', border: '1px solid red' }}>加载更多项目...</div></div>);
};export default InfiniteScrollList;

结论

react-visible-observer 是一个功能强大但简单的库,它抽象了 Intersection Observer API 的复杂性,使你能够轻松专注于构建懒加载和无限滚动等功能。它的灵活性和高性能使其成为任何希望通过可见性互动来增强用户体验的 React 开发者的绝佳选择。

在你的下一个项目中尝试 react-visible-observer,感受下它在实现滚动加载功能时带来的简单与高效!


希望本文能帮助你开始使用 react-visible-observer。欲了解更多信息,请参考官方文档。祝编码愉快!

这篇关于react-visible-observer:一个超级简单的滚动加载 npm 库的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/994352

相关文章

Vue3 的 shallowRef 和 shallowReactive:优化性能

大家对 Vue3 的 ref 和 reactive 都很熟悉,那么对 shallowRef 和 shallowReactive 是否了解呢? 在编程和数据结构中,“shallow”(浅层)通常指对数据结构的最外层进行操作,而不递归地处理其内部或嵌套的数据。这种处理方式关注的是数据结构的第一层属性或元素,而忽略更深层次的嵌套内容。 1. 浅层与深层的对比 1.1 浅层(Shallow) 定义

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

【 html+css 绚丽Loading 】000046 三才归元阵

前言:哈喽,大家好,今天给大家分享html+css 绚丽Loading!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏+关注哦 💕 目录 📚一、效果📚二、信息💡1.简介:💡2.外观描述:💡3.使用方式:💡4.战斗方式:💡5.提升:💡6.传说: 📚三、源代码,上代码,可以直接复制使用🎥效果🗂️目录✍️

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

hdu2289(简单二分)

虽说是简单二分,但是我还是wa死了  题意:已知圆台的体积,求高度 首先要知道圆台体积怎么求:设上下底的半径分别为r1,r2,高为h,V = PI*(r1*r1+r1*r2+r2*r2)*h/3 然后以h进行二分 代码如下: #include<iostream>#include<algorithm>#include<cstring>#include<stack>#includ

usaco 1.3 Prime Cryptarithm(简单哈希表暴搜剪枝)

思路: 1. 用一个 hash[ ] 数组存放输入的数字,令 hash[ tmp ]=1 。 2. 一个自定义函数 check( ) ,检查各位是否为输入的数字。 3. 暴搜。第一行数从 100到999,第二行数从 10到99。 4. 剪枝。 代码: /*ID: who jayLANG: C++TASK: crypt1*/#include<stdio.h>bool h

uva 10387 Billiard(简单几何)

题意是一个球从矩形的中点出发,告诉你小球与矩形两条边的碰撞次数与小球回到原点的时间,求小球出发时的角度和小球的速度。 简单的几何问题,小球每与竖边碰撞一次,向右扩展一个相同的矩形;每与横边碰撞一次,向上扩展一个相同的矩形。 可以发现,扩展矩形的路径和在当前矩形中的每一段路径相同,当小球回到出发点时,一条直线的路径刚好经过最后一个扩展矩形的中心点。 最后扩展的路径和横边竖边恰好组成一个直

poj 1113 凸包+简单几何计算

题意: 给N个平面上的点,现在要在离点外L米处建城墙,使得城墙把所有点都包含进去且城墙的长度最短。 解析: 韬哥出的某次训练赛上A出的第一道计算几何,算是大水题吧。 用convexhull算法把凸包求出来,然后加加减减就A了。 计算见下图: 好久没玩画图了啊好开心。 代码: #include <iostream>#include <cstdio>#inclu

uva 10130 简单背包

题意: 背包和 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#include <stack>#include <vector>#include <queue>#include <map>