You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Next.js+React博客分页组件页码不显示问题排查

分页故障排查结果

核心问题

页码无法显示的直接原因在components/Pagination.jsx的遍历渲染逻辑:

  • pageNumbers.map的回调函数使用花括号包裹,但没有写return返回JSX节点,React遍历后拿到的全是undefined,不会渲染任何内容,这类语法逻辑问题不会触发控制台报错。
  • 其余两个影响功能正常使用的问题:
    • Pagination组件放在grid布局容器下未分配列宽,会出现布局错位
    • 未传入页码切换的状态方法,就算页码渲染完成点击也无法切换分页

修正代码

1. 修复components/Pagination.jsx

补全return逻辑,新增分页切换能力、当前页高亮、上下页按钮,同时给组件加上适配grid布局的类名:

import React from 'react'

const Pagination = ({postsPerPage, totalPosts, currentPage, setCurrentPage}) => {
    const pageNumbers = []
    const totalPages = Math.ceil(totalPosts / postsPerPage)

    for(let i = 1; i <= totalPages; i++){
        pageNumbers.push(i)
    }

    const paginate = (pageNum) => {
        if(pageNum < 1 || pageNum > totalPages) return
        setCurrentPage(pageNum)
        window.scrollTo({top: 0, behavior: 'smooth'})
    }

  return (
    <div className='col-span-1 lg:col-span-8 flex justify-center mt-6'>
    <nav className="page navigation">
        <ul className="flex list-style-none gap-2">
            <li className="page-item">
                <button 
                    onClick={() => paginate(currentPage - 1)}
                    disabled={currentPage === 1}
                    className="px-3 py-1 rounded border disabled:opacity-50"
                >
                    上一页
                </button>
            </li>
            {/* 花括号改圆括号,直接返回JSX节点 */}
            {pageNumbers.map(number => (
                <li key={number} className="page-item">
                    <button 
                        onClick={() => paginate(number)}
                        className={`px-3 py-1 rounded border ${currentPage === number ? 'bg-pink-600 text-white border-pink-600' : ''}`}
                    >
                        {number}
                    </button>
                </li>
            ))}
            <li className="page-item">
                <button 
                    onClick={() => paginate(currentPage + 1)}
                    disabled={currentPage === totalPages}
                    className="px-3 py-1 rounded border disabled:opacity-50"
                >
                    下一页
                </button>
            </li>
        </ul>
    </nav>
    </div>
  )
}

export default Pagination

2. 调整pages/index.jsx的Pagination调用位置和传参

将Pagination移入文章列表所在列,传入分页状态控制方法,修正grid布局问题:

<div className="grid grid-cols-1 lg:grid-cols-12 gap-12">
  <div  className='lg:col-span-8 col-span-1'>
    {currentPosts.map((post) => <PostCard post={post.node} key={post.title}/>)}
    <Pagination 
      postsPerPage={postsPerPage} 
      totalPosts={posts.length}
      currentPage={currentPage}
      setCurrentPage={setCurrentPage}
    />
  </div>

  <div className="lg:col-span-4 col-span-1">
    <div className="lg:sticky relative top-8">
      <PostWidget />
      <Categories />
    </div>
  </div>
</div>

补充说明

当前postsPerPage初始值设为1,每页仅展示1篇文章,功能验证完成后可根据需求调整为合适的数值(如6、10)。

内容的提问来源于stack exchange,提问作者Chidimma Nworah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.02 01:21:34