Hello! Can someone tell me how create pagination with meteor and react. Read docs, but not understand how it’s work.
Regards, Evgeny.
Are you attempting to use reactive data (publication/subcription) or a meteor method?
I want to use publication/subcription with withTracker. But methods will be ok too.
Ideally i want get Next/Previous buttons. But really don’t know how to do this.
So your publication will look something like this:
Meteor.publish('dataToPaginate', function({ pageSize, page }) {
check(pageSize, Number);
check(page, Number);
const options = {
limit: pageSize,
skip: (pageSize * page),
sort: { ... } // sort is required
};
return Collection.find({}, options);
And you’ll probably have a component to select what page you’re on (psuedocode):
class Paginator extends React.Component {
state = {
page: 0,
pageSize: 10,
}
render() {
const { page, pageSize } = this.state;
return (
<CollectionDisplay page={page} pageSize={pageSize} />
<button onClick={() => set page -1}>Back</button>
<button onClick={() => set page +1}>Next</button>
);
}
}
Then your withTracker component
const CollectionDisplay = ({ isLoading, documents }) => {
if (isLoading) return 'loading...';
return documents.map(document => //....
};
export default withTracker(({ pageSize, page }) => {
const subscriptionHandle = Meteor.subscribe('dataToPaginate', { pageSize, page });
return {
isLoading: !subscriptionHandle.ready(),
documents: Collection.find({}),
};
})(CollectionDisplay);
The downside to this is it’s difficult to disable the next button once there are no more documents to fetch… I may have coded myself into a corner here, but hopefully it’s useful. The method way would be similar, and you could also return what the max page it… Hope this helps.
6 Likes
Wow! It’s really helps! Thank you!