Tech TutorBangla Web Documentation
Portfolio
HomeHTMLCSSTailwind CSSJavaScriptTypeScriptReactNext.jsNode.jsExpressSocket.IOExpoWordPressPostgreSQLPrismaPostgresNestJSMongoDBDockerTanStackTanStack TableRTK QueryGitGitHub
  • TanStack Documentation42টি অধ্যায়
প্রযুক্তি নির্বাচন
HomeHTMLCSSTailwind CSSJavaScriptTypeScriptReactNext.jsNode.jsExpressSocket.IOExpoWordPressPostgreSQLPrismaPostgresNestJSMongoDBDockerTanStackTanStack TableRTK QueryGitGitHub
  • Project Overview
  • Architecture
  • Folder Structure
  • Setup Next.js
  • Axios Setup
  • API Client
  • API Types
  • Query Install
  • Query Provider
  • Query Keys
  • Data Fetching
  • States
  • Devtools
  • Create Mutation
  • Update Mutation
  • Delete Mutation
  • Cache Invalidation
  • Optimistic Update
  • Pagination
  • Search
  • Filtering
  • Sorting
  • TanStack Table
  • Table Explore
  • Table Columns
  • Table Actions
  • React Hook Form
  • Zod Validation
  • Create Form
  • Edit Form
  • Dialog Modal
  • Delete Confirmation
  • Complete CRUD Flow
  • Full Integration
  • Error Handling
  • Loading States
  • Reusable Components
  • Production
  • Complete Project
  • Common Mistakes
  • Best Practices
  • Interview Q&A
  1. Docs
  2. TanStack
  3. Pagination — Server-side
TanStackIntermediate

Pagination — Server-side

page/pageSize state, queryKey-তে page ও pagination UI — বাংলায়।

7টি অংশবাংলা ভাষায়

ডেটা বড় হলে পুরো list fetch করা উচিত নয় — server-side pagination। আমরা page ও pageSize-কে state-এ রাখব; বদলালে queryKey বদলে নতুন page আসে।

Dashboard page-এ statetsx
tsx
"use client";

import { useState } from "react";
import { ProductList } from "@/components/products/product-list";
import { ProductPagination } from "@/components/products/product-pagination";

export default function ProductsPage() {
  const [page, setPage] = useState(1);
  const [pageSize, setPageSize] = useState(10);

  return (
    <main>
      <ProductList params={{ page, pageSize }} />
      <ProductPagination
        page={page}
        pageSize={pageSize}
        onPageChange={setPage}
        onPageSizeChange={(size) => {
          setPageSize(size);
          setPage(1);   // size বদলালে ১ম পেজে
        }}
      />
    </main>
  );
}

Pagination component

product-pagination.tsxtsx
tsx
"use client";

import { Button } from "@/components/ui/button";
import { useProducts } from "@/lib/hooks/use-products";

export function ProductPagination({ page, pageSize, onPageChange }) {
  // totalPages জানতে একই query-র total-needed
  const { data } = useProducts({ page, pageSize });

  const totalPages = data?.totalPages ?? 1;

  return (
    <div className="flex items-center justify-between">
      <span className="text-sm text-muted-foreground">
        {data ? `মোট ${data.total}টি product` : "..."}
      </span>
      <div className="flex gap-2">
        <Button
          variant="outline"
          disabled={page <= 1}
          onClick={() => onPageChange(page - 1)}
        >
          আগের
        </Button>
        <span className="px-2 text-sm">
          {page} / {totalPages}
        </span>
        <Button
          variant="outline"
          disabled={page >= totalPages}
          onClick={() => onPageChange(page + 1)}
        >
          পরের
        </Button>
      </div>
    </div>
  );
}

কেন queryKey-তে page

প্রতিটি page-র নিজস্ব cache — user page ৩-তে গিয়ে page ১-এ ফিরে আসলে fetch ছাড়াই instant। keepPreviousData-য় পেজ-বদলের মুহূর্তেও পুরনো টেবিল blush করে না।

সাইজ-বদল বা rowCount

pageSize (row per page) পরিবর্তনে page-কে ১-এ reset করা best practice — নাহলে বড় pageSize-তে page ৫-এ কোনো ডেটাই না-ও থাকতে পারে।

শেষ প্যারায় নিজে practice করুন — কোড কপি করে নিজের এডিটরে চালিয়ে দেখুন।
আগেরOptimistic UpdateপরেরSearch — Debounce
এই পেজে
Tech Tutor

বাংলায় ওয়েব ডেভেলপমেন্ট ডকুমেন্টেশন শিখুন — ধাপে ধাপে।

Homeসব ডকুমেন্টেশনQuick Startআমার নোটস

© 2026 Tech Tutor. বাংলায় শিখুন, বাংলায় গড়ুন।

mdanamolhasan1998@gmail.com