#reactjs #react-hooks #pagination
#reactjs #react-перехваты #разбивка на страницы
Вопрос:
Может кто-нибудь, пожалуйста, подсказать, как перенести нижеприведенный класс на основе перехватов react? Нет документации от официального react-paginate (https://www.npmjs.com/package/react-paginate ) веб-сайт с использованием реактивных крючков. Ценю вашу помощь. < —- Конец вопроса Конец вопроса Конец вопроса Конец вопроса >
import React, {Component} from 'react'
import axios from 'axios'
import ReactPaginate from 'react-paginate';
import './App.css'
export default class App extends Component {
constructor(props) {
super(props);
this.state = {
offset: 0,
data: [],
perPage: 10,
currentPage: 0
};
this.handlePageClick = this
.handlePageClick
.bind(this);
}
receivedData() {
axios
.get(`https://jsonplaceholder.typicode.com/photos`)
.then(res => {
const data = res.data;
const slice = data.slice(this.state.offset, this.state.offset this.state.perPage)
const postData = slice.map(pd => <React.Fragment>
<p>{pd.title}</p>
<img src={pd.thumbnailUrl} alt=""/>
</React.Fragment>)
this.setState({
pageCount: Math.ceil(data.length / this.state.perPage),
postData
})
});
}
handlePageClick = (e) => {
const selectedPage = e.selected;
const offset = selectedPage * this.state.perPage;
this.setState({
currentPage: selectedPage,
offset: offset
}, () => {
this.receivedData()
});
};
componentDidMount() {
this.receivedData()
}
render() {
return (
<div>
{this.state.postData}
<ReactPaginate
previousLabel={"prev"}
nextLabel={"next"}
breakLabel={"..."}
breakClassName={"break-me"}
pageCount={this.state.pageCount}
marginPagesDisplayed={2}
pageRangeDisplayed={5}
onPageChange={this.handlePageClick}
containerClassName={"pagination"}
subContainerClassName={"pages pagination"}
activeClassName={"active"}/>
</div>
)
}
}
Ответ №1:
Надеюсь, это поможет, это просто обзор.
const App = () => {
const [offset, setOffset] = React.useState(0);
**// Define rest of your state values here**
**// to be use in receivedData**
const [pageCount, setPageCount] = React.useState(null);
**// use this to store title, thumbnailUrl**
const [postData, setPostData] = React.useState({})
const receivedData = ()=> {
axios
.get(`https://jsonplaceholder.typicode.com/photos`)
.then(res => {
const data = res.data;
const slice = data.slice(offset, offset perPage);
**//Better to store the required values for postData in state and then render the JSX**
// const postData = slice.map(pd => <React.Fragment>
// <p>{pd.title}</p>
// <img src={pd.thumbnailUrl} alt="" />
// </React.Fragment>)
// this.setState({
// pageCount: Math.ceil(data.length / this.state.perPage),
// postData
// })
setPageCount(Math.ceil(data.length / perPage));
**// use setPostData to store tile, thumnail here**
});
}
const handlePageClick = (e) => {
const selectedPage = e.selected;
const offset = selectedPage * perPage;
setCurrentPage(selectedPage);
setOffset(offset);
receivedData();
};
useEffect(() => {
receivedData();
}, []);
return (
<div>
{/* {postData} */}
// Re-write JSX and display values from postData.
<ReactPaginate
previousLabel={"prev"}
nextLabel={"next"}
breakLabel={"..."}
breakClassName={"break-me"}
pageCount={pageCount}
marginPagesDisplayed={2}
pageRangeDisplayed={5}
onPageChange={this.handlePageClick}
containerClassName={"pagination"}
subContainerClassName={"pages pagination"}
activeClassName={"active"} />
</div>
)
}