A set of hooks, components and utilities for scrolling large datasets. Standalone components could be used as well as lower level hooks to achieve maximum flexibility.
Features
- Rendering only visible subset of data;
- Automatic scroll container resize;
- Lightweight;
- Fast
import { ListScroller } from '@vadim-sartakov/react-scroller';
const TOTAL_ROWS = 1000;
const listValue = [...new Array(TOTAL_ROWS).keys()];
const element = (
<ListScroller
defaultRowHeight={40}
totalRows={TOTAL_ROWS}
value={listValue}
height="100vh"
overscroll={2}
render={({ value, style }) => (
<div style={style}>
{value}
</div>
)}
/>
);
Prop |
Type |
Optional |
Description |
value |
any[] |
|
Array of values |
totalRows |
number |
|
Total number of rows |
defaultRowHeight |
number |
|
Default height of scroller cell |
rowsSizes |
number[] |
Yes |
Array of scroller cell heights |
height |
number, string |
|
Scroller container height. Could be any valid css string |
overscroll |
number |
Yes |
Number of elements which should be rendered out of visible scroller container |
RowComponent |
React component |
Yes |
Custom row component for grid rows. Default is div. |
rowComponentProps |
Object |
Yes |
Props to pass to row component |
import { GridScroller } from '@vadim-sartakov/react-scroller';
const TOTAL_ROWS = 1000;
const TOTAL_COLUMNS = 50;
// gridValue is a simple array of arrays
const gridValue = [...new Array(TOTAL_ROWS).keys()]
.map(row => [...new Array(TOTAL_COLUMNS).keys()]);
const element = (
<GridScroller
defaultRowHeight={40}
defaultColumnWidth={150}
totalRows={TOTAL_ROWS}
totalColumns={TOTAL_COLUMNS}
value={gridValue}
width="100%"
height="100vh"
overscroll={2}
render={({ value, style }) => (
<div style={style}>
{value}
</div>
)}
/>
);
Prop |
Type |
Optional |
Description |
value |
any[][] |
|
Array of values |
totalRows |
number |
|
Total number of rows |
totalColumns |
number |
Yes |
Total number of columns |
defaultRowHeight |
number |
|
Default height of scroller cell |
defaultColumnWidth |
number |
Yes |
Default width of scroller cell |
rowsSizes |
number[] |
Yes |
Array of scroller cell heights |
columnsSizes |
number[] |
Yes |
Array of scroller cell widths |
width |
number, string |
Yes |
Scroller container width. Could be any valid css string |
height |
number, string |
|
Scroller container height. Could be any valid css string |
onScroll |
Callback |
Yes |
On scroll callback |
overscroll |
number |
Yes |
Number of elements which should be rendered out of visible scroller container |
RowComponent |
React component |
Yes |
Custom row component for grid rows. Default is div. |
rowComponentProps |
Object |
Yes |
Props to pass to row component |
CellComponent |
React component |
|
Cell component which will be rendered as scroller cell |
cellComponentProps |
Object |
Yes |
Props to pass to cell component |