Chia sẻ Blog

Light ModeDark Mode

Blog chia sẻ về thủ thuật.

[Gatsby] Phân trang cho trang chủ (Bloglist template)

Published 2 years ago - 1 min read

-Trước khi thực hiện theo hướng dẫn này, khuyến cáo các bạn xem bài viết Tạo trang hiển thị danh sách bài viết.

Chỉnh sửa file src/templates/bloglist.js

-Sửa const BlogPage = ({ data }) => { thành const BlogPage = ({ data, pageContext }) => {

-Phía dưới code const posts = data.allMarkdownRemark.edges; thêm:

  const { currentPage, numPages } = pageContext;
  const pathPrefix = '';
  const isFirst = currentPage === 1;
  const isLast = currentPage === numPages;
  const prevPage =
    currentPage - 1 === 1
      ? `${pathPrefix}/`
      : `${pathPrefix}/${(currentPage - 1).toString()}`;
  const nextPage = `${pathPrefix}/${(currentPage + 1).toString()}`;

-Hiển thị phân trang ở cuối danh sách bài viết, có 2 lựa chọn:

  • Hiển thị Next và Previous, thêm trước </Layout>:
       <div className="page-navigation">
        {!isFirst && (
          <Link to={prevPage} rel="prev">
            ← Previous
          </Link>
        )}

<span> Page {currentPage} of {numPages} </span>

        {!isLast && (
          <Link to={nextPage} rel="next">
            Next →
          </Link>
        )}
      </div>
  • Hiển thị dạng số, thêm trước </Layout>:
{Array.from({ length: numPages }, (_, i) => (
        <Link key={`pagination-number${i + 1}`} to={`/${i === 0 ? "" : i + 1}`}>
          {i + 1}
        </Link>
      ))}