1 引言 IntersectionObserver 可以轻松判断元素是否可见,在之前的 精读《用 React 做按需渲染》 中介绍了原生 API 的方法,这次刚好看到其 React 封装版本 react-intersection-observer 2 简介 react-intersection-observer 提供了 Hook useInView 判断元素是否在可视区域内,API 如下: import React from "react"; import { useInView } from "react-intersection-observer"; const Component = () => { const [ref, inView] = INSTANCE_MAP.has(element), "react-intersection-observer: Trying to observe %s, but it's already being 看过 react-intersection-observer 的源码后,你觉得还有可优化的地方吗?欢迎讨论。 版权声明:自由转载-非商用-非衍生-保持署名(创意共享 3.0 许可证)
('scroll', scrollRenderHandler); }; }, [scrollRenderHandler]); 方法 2:Intersection Observer 使用 react-intersection-observer customize the field names const [ref, inView, entry] = useInView(options); import { useInView } from 'react-intersection-observer IntersectionObserver API 使用教程 - 阮一峰的网络日志: http://www.ruanyifeng.com/blog/2016/11/intersectionobserver_api.html [7] 精读《react-intersection-observer 8] useCallback、useMemo 分析 & 差别: https://juejin.cn/post/6844904001998176263#heading-7 [9] thebuilder/react-intersection-observer : https://github.com/thebuilder/react-intersection-observer [10] React 如何渲染大数据量的列表?
在组件实际编写中我选择直接 react-intersection-observer 代替原生 API,此模块提供了适用于 Reacrt 中用来监控组件状态的钩子 useInView Hoook API, import { useState } from 'react'; import { useInView } from 'react-intersection-observer'; import Image
解决了资源懒加载——当图片滚动到可见时才进行加载 import { useInView } from 'react-intersection-observer'; import Lottie from
常用工具: react-window react-loadable JS原生,如IntersectionObserver 框架提供,如React.lazy、react-intersection-observer
) // "滚动加载更多"式分页 import { useInfiniteQuery } from'@tanstack/react-query'; import { useInView } from'react-intersection-observer