reactjs - 检查元素是否在视口中但具有映射的参考 - ReactJS
问题描述
我想知道是否有人可以提供帮助。
我一直在研究很多解决方案来检查元素何时显示在视点中,目前正在尝试将此方法集成到我的项目中 - https://www.webtips.dev/webtips/react-hooks/element-in- viewport,此方法使用 refs 但是我希望在页面上拥有的内容不是静态的,而是映射的。我发现这种方法可以动态使用 refs - https://dev.to/nicm42/react-refs-in-a-loop-1jk4但是我认为我做错了,因为我收到以下错误:
TypeError:无法在“IntersectionObserver”上执行“观察”:参数 1 不是“元素”类型。
任何帮助都非常感谢。
非常感谢,代码如下。
组件.js
import { useRef, createRef } from 'react'
import useIntersection from './useIntersection.js'
const MyComponent = ({ someStateData }) => {
const ref= useRef([]);
ref.current = someStateData.map((title, i) => ref.current[i] ?? createRef());
const inViewport = useIntersection(ref, '0px');
if (inViewport) {
console.log('in viewport:', ref.current);
}
{someStateData.map((title, i) => {
return (
<div key={title.id} id={title.id} ref={ref.current[i]}>
{{ title.id }}
</div>
)
})}
}
使用Intersection.js
import { useState, useEffect } from 'react'
const useIntersection = (element, rootMargin) => {
const [isVisible, setState] = useState(false);
useEffect(() => {
const observer = new IntersectionObserver(
([entry]) => {
setState(entry.isIntersecting);
}, { rootMargin }
);
element && observer.observe(element);
return () => observer.unobserve(element);
}, []);
return isVisible;
};
export default useIntersection
解决方案
ref.current
有一组参考
const ref= useRef([]);
ref.current = someStateData.map((title, i) => ref.current[i] ?? createRef());
该observe
函数需要Element
观察,但代码调用整个 ref
const inViewport = useIntersection(ref, '0px');
const useIntersection = (element, rootMargin) => {
...
...
observer.observe(element);
引用@backtick“是一个具有属性的对象数组current
”,正确的调用应该是这样的
observer.observe(ref.current[i].current)
推荐阅读
- android - 关于Android Studio中Java中CheckBox的问题
- android - 从包中检索传递的参数时,为什么 Android Studio 会发出警告并建议使用 requireArguments() 而不是参数!!?
- jquery - 如何将格式更改为范围滑块的巴西标准
- powershell - 使用 Powershell 脚本将 .exe 从网络共享复制到远程计算机并安装 .exe 时出错
- scala - 如何将初始值从具有函数链接的过滤列表中传递给 foldLeft?
- python - 是否可以以编程方式从数据包中重新创建请求?
- r - Phyloseq sample_data() 和 sample_names() 无法将样本合并到 phyloseq 对象中
- python - 删除 pandas 中的重复项,但保存其他列 PANDAS 中的值
- c# - 部署 ASP.NET Core Docker 项目 - 收到 405 错误(在我的 IIS 本地,Web 请求有效)。如何解决?
- sql - 多个自连接和空值