[英]How best to add pagination to a search result query in Reactjs?
我有一个 MERN 堆栈应用程序,我在 Nodejs 中编写了搜索查询和分页,我在 Reactjs 中实现了分页部分,并且也想实现搜索查询。 它正在工作,但没有分页。 我想如果搜索结果超过 20 个结果,我只想让它变成两页。 我可以每页做 12 个搜索结果。 有没有办法做到这一点? 我可以在单个 URL 中同时添加搜索和分页查询吗? 这是我的nodejs代码:
const DEFAULT_PAGE_NUMBER = 1
const DEFAULT_PAGE_LIMIT = 12;
const getPagination =(query) =>{
const page = Math.abs(query.page) || DEFAULT_PAGE_NUMBER;
const limit = Math.abs(query.limit) || DEFAULT_PAGE_LIMIT;
const skip = (page -1) * limit
return {
skip,
limit
};
};
const getAllPosts = async (req, res) =>{
const {skip, limit} = getPagination(req.query);
const {searches} = req.query;
if(searches){
posts = await Post.find({title: {$regex: searches.toString(), "$options": "i"}}).populate('username', 'username').sort({createdAt:-1})
.skip(skip)
.limit(limit)
}
}
现在,在 Reactjs 中,我为分页查询做了这样的事情:
useEffect(()=>{
try{
const response = await axios.get(`/posts/?page=${path}`);
}catch(err){
}
}, [path]);
这适用于分页,每页显示 12 个帖子。
现在,在 Reactjs 中,我为搜索查询做了这样的事情:
useEffect(()=>{
try{
const response = await axios.get(`/posts/?searches=${path}`);
}catch(err){
}
}, [path])
现在,这行得通。 它根据用户输入的搜索词获取帖子。 问题是结果可能比我在页面中想要的要多。 有没有一种方法可以将我写的分页查询也集成到其中,以便当搜索结果超过 12 时,其他帖子将在下一页上被调用?
我通过在正文中传递搜索参数和查询中的分页来解决这个问题。 这解决了我的问题。 查看示例代码
const {skip, limit} = getPagination(req.query);//pagination
const search = req.body.search;//search
if(search){
posts = await Post.find({title: {$regex: search.toString(), "$options": "i"}}).populate('username', 'username').sort({createdAt:-1})
.skip(skip)
.limit(limit)
}
else{
fetch the entire posts if there is no search parameter.
}
数据表插件提供了非常好的开箱即用的分页
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.