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. Search — Debounce
TanStackIntermediate

Search — Debounce

Search input, debounce ও API-তে search param — বাংলায়।

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

সার্চ প্রতিটি keystroke-এ server-এ request পাঠালে spam হয়। তাই debounce — ব্যবহারকারী লেখা থামানোর ৪০০ms পরে request।

useDebounce hook

src/lib/hooks/use-debounce.tsts
ts
"use client";

import { useEffect, useState } from "react";

export function useDebounce<T>(value: T, delay = 400): T {
  const [debounced, setDebounced] = useState(value);

  useEffect(() => {
    const timer = setTimeout(() => setDebounced(value), delay);
    return () => clearTimeout(timer);
  }, [value, delay]);

  return debounced;
}

Dashboard-এ প্রয়োগ

Search integrationtsx
tsx
const [searchInput, setSearchInput] = useState("");
const search = useDebounce(searchInput, 400);

// search-এ কোনো ডেটা থাকলে পেজ রিসেট
useEffect(() => {
  setPage(1);
}, [search]);

const params: ProductQueryParams = {
  page,
  pageSize,
  search: search || undefined,   // খালি হলে param নেই
  category: category || undefined,
  status: status === "all" ? undefined : status,
};

<ProductList params={params} />

ইনপুট component

Search inputtsx
tsx
<div className="relative">
  <SearchIcon className="absolute left-3 top-1/2 size-4 -translate-y-1/2 text-muted-foreground" />
  <Input
    value={searchInput}
    onChange={(e) => setSearchInput(e.target.value)}
    placeholder="Product খুঁজুন…"
    className="pl-9"
  />
</div>
Debounce কেন

queryKey-এ search দিলে প্রতিটি অক্ষরে নতুন query হতো। debounce-এর পরে প্রতি ৪০০ms-এ একবার — সার্ভারের উপর চাপ কম, বরং UX-এ কোনো তফাত নেই।

শেষ প্যারায় নিজে practice করুন — কোড কপি করে নিজের এডিটরে চালিয়ে দেখুন।
আগেরPagination — Server-sideপরেরFiltering — Category ও Status
এই পেজে
Tech Tutor

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

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

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

mdanamolhasan1998@gmail.com