【发布时间】:2021-01-09 07:56:19
【问题描述】:
我正在尝试显示分页的学生信息的网站。例如,我有 12 个学生,我有 1-4 个分页项,因为我一次显示 3 个学生。
我在调用更新分页函数时遇到了问题。尽管我正确地递增它,但此方法中的计数器始终为 0。任何想法或指示将不胜感激。
import React, {useState, useEffect} from 'react';
function App() {
let students = [
{'name': 'Harry'},
{'name': 'Hermoine'},
{'name': 'Ron'},
{'name': 'Ginny'},
{'name': 'Snape'},
{'name': 'Bellatrix'},
{'name': 'Albus'},
{'name': 'Dudley'},
{'name': 'Petunia'},
{'name': 'Hagrid'},
{'name': 'Lee'},
{'name': 'James'}
];
let [loaded, setLoaded] = useState(false);
let [pagination, setPagination] = useState([]);
let [limit, setLimit] = useState(3); // how many students are visible at a time
let [pages, setPages] = useState(Math.round(students.length/limit)); // amount of pages based on total students
let [currentPage, setCurrentPage] = useState(1); // the current page
let [pageCount, setPageCount] = useState(0); // counter used to increment/decrement pages in view
function updatePagination() {
let tmpArray = [];
for(let i = pageCount; i < pages; i ++){
tmpArray.push(i+1);
}
// 1-3, 4-6 etc...
setPagination(tmpArray.slice(pageCount, pageCount + limit)); // this pageCount is always 0 despite me setting it on handleNext method
}
function handleNext(){
setCurrentPage(currentPage + 1);
if(pageCount + limit === currentPage){
if(currentPage <= pages){
setPageCount(pageCount + limit);
}
}
updatePagination();
}
useEffect(() => {
updatePagination();
setLoaded(true);
}, []);
return (
<main className={styles.app}>
<div className={styles.student}>
<h1>Three student cards</h1>
</div>
<ol className={styles.pagination}>
<div className={styles.paginationContainer}>
<button className={currentPage === 0 ? styles.prev + ' ' + styles.disabled : styles.prev}>prev</button>
{loaded && pagination.map((item, index) => {
return (
<li key={index} className={styles.paginationItem}>
<button className={currentPage === item ? styles.active : null}>{item}</button>
</li>
)
})}
<button onClick={() => {
handleNext()
}} className={currentPage === pages ? styles.next + ' ' + styles.disabled : styles.next}>next</button>
</div>
</ol>
{loaded &&
<div className={styles.info}>
<p>Page Count: {pageCount}</p>
<p>Current Page: {currentPage}</p>
<p>Limit: {limit}</p>
<p>Pages: {pages}</p>
<p>Total Students: {students.length}</p>
<p>Pagination: {pagination}</p>
</div>
}
</main>
);
}
export default App;
【问题讨论】:
-
我无法在 snadbox 中运行您的示例,您可以制作一个代码nadbox 来解释问题所在吗?这是代码:codesandbox.io/s/adoring-hooks-wlcwm
-
这里是 Adir codesandbox.io/s/hook-issue-7b57d-7b57d,当我单击下一步按钮时,它转到第 2 页、第 3 页,这很好,问题是当它调用 updatePagination 函数时,调用此方法时 pageCount 始终为 0尽管更新了 handleNext 上的 pageCount
-
你能解释一下这个条件背后的原因吗:
pageCount + limit === currentPageinsidehandleNextfunction? -
Yousaf 用户出现以下分页 当用户达到 3 时,它应该将项目更新为 所以基本上当你到达最后一个可见项目时,你会增加计数和用它来切片数组。我有一个分页数组,它本质上是学生总数 1 2 3 4 5 6 7 8 9 10 11 12 使用下一个按钮时我将计数增加了限制,在这种情况下为 3,所以使用见 123,然后是 456 等。 .. 接受更简单的解决方案或想法
标签: javascript reactjs pagination use-state