Socket
Book a DemoInstallSign in
Socket

react-virtual-infinite-scroll-hook

Package Overview
Dependencies
Maintainers
1
Versions
1
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

react-virtual-infinite-scroll-hook

A lightweight React hook for infinite scroll support with virtualized scrollbars (e.g. AntD Table).

1.0.0
latest
Source
npmnpm
Version published
Weekly downloads
3
-78.57%
Maintainers
1
Weekly downloads
 
Created
Source

📦 react-virtual-infinite-scroll-hook

A lightweight React hook for infinite scrolling with virtual scrollbars (like Ant Design tables).
Easily detect when the scrollbar thumb reaches the bottom and trigger data loading.

✨ Features

  • ⚡ Works with virtual scrollbars (AntD, custom scrollbars, etc.)
  • 🎛 Configurable offset & throttleDelay
  • ✅ Handles hasMore & loading states
  • 🔌 Supports both ref and CSS selectors
  • 🐞 Optional debug logs
  • 📴 Can be enabled/disabled dynamically

📦 Installation

npm install react-virtual-infinite-scroll-hook

🚀 Usage

import { Table } from "antd";
import React, { useState, useEffect } from "react";
import useVirtualInfiniteScroll from "react-virtual-infinite-scroll-hook";
import { fetchData } from "../helpers/fetchData";
import { COLUMNS } from "../helpers/constants";

const AntdTableVirtualWithInfiniteScroll: React.FC = () => {
  const [data, setData] = useState<any[]>([]);
  const [page, setPage] = useState(1);
  const [loading, setLoading] = useState(false);
  const [hasMore, setHasMore] = useState(true);

  const loadMore = async () => {
    if (loading || !hasMore) return;
    setLoading(true);
    const newData = await fetchData(page, 10);
    setData((prev) => [...prev, ...newData]);
    setHasMore(newData.length > 0);
    setPage((p) => p + 1);
    setLoading(false);
  };

  useVirtualInfiniteScroll({
    onLoadMore: loadMore,
    hasMore,
    loading,
    scrollbarSelector: ".ant-table-tbody-virtual-scrollbar-vertical",
    // thumbSelector: ".ant-table-tbody-virtual-scrollbar-thumb",
    offset: 80, // trigger 80px before bottom
    throttleDelay: 100, // throttle observer updates
    debug: true, // see logs in console
    enabled: true,
  });

  useEffect(() => {
    loadMore();
  }, []);

  return (
    <div style={{ maxWidth: 700 }}>
      <Table
        bordered
        columns={COLUMNS}
        loading={loading}
        dataSource={data}
        pagination={false} //👈 disable pagination
        virtual={true} // 👈 enable virtual table
        scroll={{ y: 500 }} // 👈 Virtual table container height
      />
    </div>
  );
};

export default AntdTableVirtualWithInfiniteScroll;

🔧 API

PropTypeDefaultDescription
onLoadMore() => voidreqCalled when scroll reaches bottom
hasMorebooleanreqIf false, stops triggering loads
loadingbooleanreqPrevents multiple calls while loading
offsetnumber0Trigger before reaching bottom (px)
throttleDelaynumber200Throttle delay for scroll handler (ms)
scrollbarRefReact.RefObject<HTMLElement>nullRef for scrollbar container (preferred)
scrollbarSelectorstringnullCSS selector for scrollbar (fallback)
thumbSelectorstringnullCSS selector for scrollbar thumb
enabledbooleantrueEnable/disable infinite scroll
debugbooleanfalseLog debug info

📜 License

MIT © Sudip Kundu

Keywords

react

FAQs

Package last updated on 23 Aug 2025

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

About

Packages

Stay in touch

Get open source security insights delivered straight into your inbox.

  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc

U.S. Patent No. 12,346,443 & 12,314,394. Other pending.