A lightweight scroll based paginator for ReactJS.
npm install react-scroll-paginatorimport ReactStickyHeader from 'react-scroll-paginator';
class View extends Component {
state: {
rows: Array<number>,
count: number,
limit: number,
offset: number,
} = {
rows: [],
};
props: {
infiniteScroll?: boolean,
};
fakeApi = createFakeApi();
action = () => {
return this.fakeApi().then((data) => {
this.setState((state) => ({
...data,
rows: state.rows.concat(data.rows),
}));
});
};
renderChild (row: number, index: number) {
return (
<li key={index} className="View_child">
{row}
</li>
);
}
render () {
return (
<div>
<ReactScrollPaginator
{...this.props}
action={this.action}
rows={this.state.rows}
count={this.state.count}
limit={10}
initialOffset={0}
progressComponent={<div className="View_progress">LOADING...</div>}
>
{this.renderChild}
</ReactScrollPaginator>
</div>
);
}
}| prop | type | required |
|---|---|---|
| children | (item: T, index: number) => Children | yes |
| limit | number | yes |
| count | number | yes |
| rows | Array | yes |
| action | (limit: number, offset: number) => Promise<*> | yes |
| initialOffset | number | no |
| className | string | no |
| progressComponent | Children | no |
| infiniteScroll | boolean | no |
| renderContainer | (props: ContainerProps) => Children | no |
| renderButton | (props: ButtonProps) => Children | no |
Takes a function that returns some jsx.
How big each page should be.
Total number of rows to expect for all pages combined.
Array of rows that can be of any type.
Action that the paginator will call to load more data. Expects the function to return a promise that will eventually resolve.
If you want to start from a position other than 0, set this.
Component to render when the paginator is loading.
Set this to true if you want pagination to start immediately when the user scrolls into view. Don't set this if you want the user to interact with a "LOAD MORE" button to begin pagination.
Set this to override the default ul container with something else. It is passed children in props.
Set this to override the default load more button. It is passed a onClick in props.
To run the component in various modes, run the following command then go to http://localhost:6006/.
npm startnpm test