【发布时间】:2021-01-06 06:47:47
【问题描述】:
我想在 React 中创建分页。所有数据均来自商店。在这段代码中,我想实现搜索引擎。这次我没有这个,但我写了模拟那个的搜索方法。好的,它可以工作,但是 - 在我点击你好之后,它只显示类别 2 中的项目,但它一直显示相同的页面(在我的情况下为 3)。如果我再点击 2 次,它只显示 1 页。我在搜索中添加了 setCountItems 和 setPages,因为这个钩子不会自动更新。
import React, { useEffect, useState, useRef } from 'react'
import { connect} from 'react-redux'
import Article from './article'
const ArticlesContainer = ({ articles }) => {
const [allItems, setAllItems] = useState(articles.list);
const [pageNumber, setPageNumber] = useState(1);
const [perSite, setPerSite] = useState(10);
const [totalItems, setCountItems] = useState(allItems.length);
const from = (pageNumber - 1) * perSite;
const to = ((pageNumber - 1) * perSite) + perSite;
const [pages, setPages] = useState(Math.ceil(totalItems / perSite));
const handlePageClick = (i) => {
setPageNumber(i);
}
const search = () => {
setAllItems(allItems.filter(x => x.category=== 2 ));
setCountItems(allItems.length);
setPages(Math.ceil(totalItems / perSite));
}
const Pagination = ({pages}) => {
let list = []
for(let i = 1; i<=pages; i++){
list.push(<li key={i} onClick={() => handlePageClick(i)}>{i}</li>)
}
return list;
}
return (
<React.Fragment>
<a onClick={search}>Hello</a>
{allItems.slice(from, to).map(article =>
<Article key={article.id} article={article} />
)}
<div className="row">
<ul>
<Pagination pages={pages} />
</ul>
</div>
</React.Fragment>
);
}
const mapStateToProps = state => ({
articles: state.articles
})
export default connect(mapStateToProps, null)(ArticlesContainer);
问题出在哪里?
【问题讨论】:
标签: javascript reactjs pagination frontend