Я пытаюсь сделать приложение с извлечением и разбивкой на страницы, на одной странице должно быть 12 элементов, Пока я чего-то достиг, есть 12 элементов, и я могу видеть следующую и предыдущую страницы, но я хочудостичь того, чтобы увидеть количество страниц, а затем, например, перейти с 1-й страницы на 3-ю и т. д. Кто-нибудь знает, как это сделать?Мой код:
class App extends Component {
constructor(props) {
super(props)
this.state = {
photos: [],
thumbnailUrl: '',
visible: 0,
nextVisible: 12,
error: ''
}
}
componentDidMount() {
fetch('https://jsonplaceholder.typicode.com/photos')
.then(response => response.json())
// .then(json => console.log(json))
.then(resp => {
this.setState({
photos: resp,
})
})
}
loadMore() {
this.setState((prev) => {
return {
visible: prev.visible + 12,
nextVisible: prev.nextVisible + 12,
error: ''
}
})
}
loadLess() {
if (this.state.nextVisible > 12) {
this.setState((prev) => {
return {
visible: prev.visible - 12,
nextVisible: prev.nextVisible - 12,
}
})
} else {
this.setState({
error: 'you are on first page'
})
}
}
render() {
return (
<div>
<Grid>
<Row>
<Col md={6}>
{this.state.photos.slice(this.state.visible, this.state.nextVisible).map((e, i) =>
<ColumnFirst
title={e.title}
thumbnailUrl={e.thumbnailUrl}
key={i}
/>
)}
<button onClick={e => this.loadLess(e)}>Previous Page</button>
<button onClick={e => this.loadMore(e)}>Next Page</button>
<p>{this.state.error}</p>
</Col>
</Row>
</Grid>
</div>
);
}
}
export default App;
РЕДАКТИРОВАТЬ: я пытался использовать response-js-pagination, но кроме этого я могу видеть количество страниц ниже, ничего не происходит, когда я меняю страницу, я имею в виду, я знаю, как написатьфункция, чтобы увидеть следующие 12 страниц или предыдущие.Но почему-то я понятия не имею, как позволить приложению вычислять и показывать элементы на определенной странице
handlePageChange(pageNumber) {
console.log(`active page is ${pageNumber}`);
this.setState({ activePage: pageNumber });
}
<Col md={6}>
{this.state.photos.slice(this.state.visible, this.state.nextVisible).map((e, i) =>
<ColumnFirst
title={e.title}
thumbnailUrl={e.thumbnailUrl}
key={i}
/>
)}
<Pagination
activePage={this.state.activePage}
itemsCountPerPage={this.state.nextVisible}
totalItemsCount={this.state.photos.length}
pageRangeDisplayed={5}
onChange={e => this.handlePageChange(e)}
/>
<button onClick={e => this.loadLess(e)}>Previous Page</button>
<button onClick={e => this.loadMore(e)}>Next Page</button>
<p>{this.state.error}</p>
</Col>