A lightweight scroll based paginator for ReactJS.
npm install react-scroll-paginator
import 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 start
npm test