Skip to content

虚拟滚动痛点:

  • 节点内存
  • 阻塞主线程
  • 滚动卡顿:频繁触发重绘重排

核心原理:

通过计算,只渲染视口内容;

  • 防抖滚动处理
  • 通过Observer监听滚动事件,计算视口内的内容,只渲染视口内的内容;
  • Web Worker:将滚动位置计算移至非主线程,避免阻塞 UI 渲染;
ts
// 防抖滚动处理
const handleScroll = useThrottle((e: React.UIEvent<HTMLDivElement>) => {
  setScrollTop(e.currentTarget.scrollTop);
}, 16);

// 结合 IntersectionObserver
useEffect(() => {
  const observer = new IntersectionObserver((entries) => {
    entries.forEach(entry => {
      if (entry.isIntersecting) {
        // 动态加载数据或更新状态
      }
    });
  }, { root: containerRef.current });

  visibleItems.forEach(item => {
    observer.observe(item.node);
  });
  return () => observer.disconnect();
}, [visibleItems]);
本站访客数 人次 本站总访问量