Next.js分类页面如何实现分页参数的获取?
问题
我在博客首页通过searchParams实现了分页功能(URL格式如url/?page=2),代码运行正常。现在需要在分类页面实现同样的分页,该页面已通过路由params获取分类名称,但尝试在params中添加分页参数的获取逻辑时,发现params仅返回{ category: '名称' },无法获取分页参数,请问该如何解决?
相关代码片段
首页实现代码
export default async function HomePage({ searchParams, }: { searchParams: {[key: string]: string | string[] | undefined}; }) { const DataPosts = await getPostsNumber(); const PostsNumber = DataPosts.postCount; const page = getNumericParam(searchParams.pagina, 1); const limit = getNumericParam(searchParams.numar, 10);
分类页原有代码(获取分类名称)
export async function generateMetadata({params}: {params: {category: string}}) { const slug = params.category;
我的尝试代码
export default async function Page({ params, }: { params: {category: string; [key: string]: string | string[] | undefined}; }) { const slug = params.category; const DataPosts = await getPostsNumber(slug); const PostsNumber = DataPosts.categories[0].count; const page = getNumericParam(params.pagina, 1); const limit = getNumericParam(params.numar, 10);
解决方案
核心问题是你混淆了路由params和URL查询参数searchParams的作用:
- 路由
params只负责获取URL路径中的动态片段(比如分类页/category/xxx里的xxx) - 分页参数
pagina、numar属于URL查询字符串(即?后面的部分),这类参数必须通过searchParams获取,和首页逻辑一致。
修改分类页代码,同时接收params和searchParams即可:
export default async function Page({ params, searchParams, }: { params: {category: string}; searchParams: {[key: string]: string | string[] | undefined}; }) { const slug = params.category; const DataPosts = await getPostsNumber(slug); const PostsNumber = DataPosts.categories[0].count; // 和首页一致,用searchParams获取分页参数 const page = getNumericParam(searchParams.pagina, 1); const limit = getNumericParam(searchParams.numar, 10);
如果generateMetadata函数需要用到分页参数,同样可以添加searchParams参数:
export async function generateMetadata({params, searchParams}: { params: {category: string}; searchParams: {[key: string]: string | string[] | undefined}; }) { const slug = params.category; const page = getNumericParam(searchParams.pagina, 1); // 后续逻辑...
内容的提问来源于stack exchange,提问作者Ioan
相关产品推荐
相关产品推荐

