New:Microsoft Teams Notifications Are Now Available in Socket.Learn more →
Get Started

viewport-scroll

Package Overview
Dependencies
Maintainers
1
Versions
3
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

viewport-scroll

A simple React component to track the window's viewport-scroll position.

Source
npmnpm
Version
1.0.0
Version published
Weekly downloads
2
-50%
Maintainers
1
Weekly downloads
 
Created
Source

ScrollY

A simple React component to track the window's viewport-scroll position.

Installation

npm install viewport-scroll

Usage

import ViewportScroll, { type ScrollHandlerType } from "viewport-scroll";
import { useState } from "react";

type State = {
   isLoading: boolean,
   data: {
      id: number,
      name: string,
   }[],
};

const style = {
   height: "97vh",
   width: "80%",
   overflowY: "auto",
   margin: "auto",
};
export default function Component() {
   const [user, setUser] = useState < State > { isLoading: false, data: [] };

   const getCharacter: ScrollHandlerType = async ({ page, setHasMore }) => {
      try {
         setUser((prev) => ({ ...prev, isLoading: true }));
         await new Promise((resolve) => setTimeout(resolve, 1000));
         const data = await (await fetch(`https://rickandmortyapi.com/api/character?page=${page}`)).json();
         const results = data?.results ?? [];
         if (results.length === 0 || !data.info?.next) {
            setHasMore(false);
         }
         setUser((prev) => ({ isLoading: false, data: [...prev.data, ...results] }));
      } catch (error) {
         setUser((prev) => ({ ...prev, isLoading: false }));
         setHasMore(false);
      }
   };

   return (
      <ViewportScroll threshold={200} isLoading={user.isLoading} asyncHandler={getCharacter} style={style}>
         {user.data.map((char) => (
            <h3 key={char.id}>{char.name}</h3>
         ))}
         {user.isLoading && <div>Loading more characters...</div>}
      </ViewportScroll>
   );
}

FAQs

Package last updated on 10 Aug 2025

Related posts