0.1.1 • Published 11 months ago

@maisonsmd/react-infinite-scroll v0.1.1

Weekly downloads
-
License
MIT
Repository
github
Last release
11 months ago

InfiniteScroll

A React component for a scrollable container that lazily loads items at the top and bottom when scrolled.

Installation

npm install @maisonsmd/react-infinite-scroll

Basic Usage

See the full example on CodeSandbox.

import { useState } from 'react';
import { InfiniteScroll } from '@maisonsmd/react-infinite-scroll';

function App() {
  const [items, setItems] = useState<any[]>([/* initial data */]);

  const hasNext = /* boolean indicating more data at bottom */;
  const hasPrevious = /* boolean indicating more data at top */;

  function loadNext() {
    /* fetch or generate items for bottom */
  }

  function loadPrevious() {
    /* fetch or generate items for top */
  }

  return (
    <InfiniteScroll
      hasNext={hasNext}
      hasPrevious={hasPrevious}
      onBottomReached={loadNext}
      onTopReached={loadPrevious}
      loaderToast={<div className="toast">Loading...</div>}
      topLoader={(ratio) => <div style={{ opacity: ratio }}>Loading Top...</div>}
      bottomLoader={(ratio) => <div style={{ opacity: ratio }}>Loading Bottom...</div>}
    >
      {items.map((item, index) => (
        <div key={item.id ?? index}>
          {/* item display */}
        </div>
      ))}
    </InfiniteScroll>
  );
}

export default App;

Props

PropTypeDescription
classNamestringOptional classNames for the container.
stylesCSSPropertiesInline styles for the container.
childrenReactNodeScrollable content.
debounceDelaynumberDebounce interval in ms for top/bottom events. Default 100.
hasPreviousbooleanIndicates if there are items to load above.
hasNextbooleanIndicates if there are items to load below.
loaderToastReactNodeToast displayed briefly after loading.
toastVisibleDurationnumberDuration in ms to show the toast. Default 1000.
topLoader(ratio) => ReactNodeRender function for top loader, with ratio being the interection percentage (0..1), good for render a circular progress
bottomLoader(ratio) => ReactNodeRender function for bottom loader, with ratio being the interection percentage (0..1)
endMessageReactNodeElement displayed when there are no more items.
onTopReached() => voidCallback for when the top is reached.
onBottomReached() => voidCallback for when the bottom is reached.

License

MIT.

0.1.1

11 months ago

0.1.0

11 months ago

0.0.1

11 months ago