Tech TutorBangla Web Documentation
Portfolio
HomeHTMLCSSTailwind CSSJavaScriptTypeScriptReactNext.jsNode.jsExpressSocket.IOExpoWordPressPostgreSQLPrismaPostgresNestJSMongoDBDockerTanStackTanStack TableRTK QueryGitGitHub
  • RTK Query Documentation39টি অধ্যায়
প্রযুক্তি নির্বাচন
HomeHTMLCSSTailwind CSSJavaScriptTypeScriptReactNext.jsNode.jsExpressSocket.IOExpoWordPressPostgreSQLPrismaPostgresNestJSMongoDBDockerTanStackTanStack TableRTK QueryGitGitHub
  • Redux Intro
  • Architecture
  • Redux Toolkit
  • Project Setup
  • Folder Structure
  • configureStore
  • Redux Provider
  • createSlice
  • Reducers & Actions
  • Typed Hooks
  • Selectors
  • Devtools
  • RTK Query
  • createApi
  • API Middleware
  • API Tags
  • Fetch List
  • Fetch Detail
  • Mutation — Create
  • Mutation CRUD
  • Cache Invalidation
  • Cache Lifecycle
  • Polling
  • Query Selectors
  • Optimistic Update
  • Cart Slice Full
  • Cart UI
  • Local vs Server
  • Listener Middleware
  • Error Handling
  • Loading States
  • Serializability
  • SSR Prefetch
  • Complete Flow
  • Complete Project
  • Production
  • Common Mistakes
  • Best Practices
  • Interview Q&A
  1. Docs
  2. RTK Query
  3. Cart UI — Dispatch ও RTK Query একসাথে
RTK QueryIntermediate

Cart UI — Dispatch ও RTK Query একসাথে

product price-টা query-থেকে cart-এ যোগ করে — cart drawer — বাংলায়।

6টি অংশবাংলা ভাষায়
add-to-cart buttontsx
tsx
"use client";

import { useAppDispatch } from "@/hooks/use-app-dispatch";
import { addItem } from "@/features/cart/cartSlice";

export function AddToCartButton({ product }: { product: Product }) {
  const dispatch = useAppDispatch();

  function handleAdd() {
    // RTK Query-র data নয় — slice action dispatch
    dispatch(addItem({ productId: product.id, qty: 1 }));
  }

  return (
    <Button
      onClick={handleAdd}
      disabled={product.stock === 0}
    >
      {product.stock === 0 ? "স্টক শেষ" : "কার্টে যোগ করুন"}
    </Button>
  );
}

Cart drawer — price joining

price products-থেকে মিলিয়েtsx
tsx
export function CartDrawer() {
  const items = useAppSelector(selectCartItems);
  const { data: products } = useGetProductsQuery();

  const total = items.reduce((sum, item) => {
    const price = products?.find((p) => p.id === item.productId)?.price ?? 0;
    return sum + price * item.qty;
  }, 0);

  return (
    <Sheet>
      <SheetContent className="w-80">
        <SheetHeader>
          <SheetTitle>উত্পাদিত পণ্যের কার্ট</SheetTitle>
        </SheetHeader>

        {items.length === 0 ? (
          <p className="py-10 text-center text-muted-foreground">
            কার্ট খালি
          </p>
        ) : (
          <>
            <ul className="space-y-3">
              {items.map((item) => {
                const product = products?.find(
                  (p) => p.id === item.productId,
                );
                return (
                  <li key={item.productId}>
                    <div className="flex items-center justify-between">
                      <span>{product?.name ?? "…"}</span>
                      <span>{product?.price ?? 0} ৳</span>
                    </div>
                    <div className="flex items-center gap-2">
                      <Button size="sm" variant="ghost"
                        onClick={() => dispatch(decrement(item.productId))}>
                        −
                      </Button>
                      <span>{item.qty}</span>
                      <Button size="sm" variant="ghost"
                        onClick={() => dispatch(increment(item.productId))}>
                        +
                      </Button>
                    </div>
                  </li>
                );
              })}
            </ul>

            <Separator />
            <div className="flex justify-between font-semibold">
              <span>সর্বমোট</span>
              <span>{total} ৳</span>
            </div>
            <CheckoutButton />
          </>
        )}
      </SheetContent>
    </Sheet>
  );
}

কে কী dispatch

ইন্টারঅ্যাকশনRTK Queryslice action
প্রোডাক্ট লিস্টuseGetProductsQuery—
কার্টে যোগ—dispatch(addItem(...))
পরিমাণ ±—dispatch(increment/decrement)
চেকআউটuseCreateOrderMutationতারপর dispatch(clearCart())
Data→state-৪০ ছাড়াই

products?.find(...) — query data-র copy করা state ছাড়াই direct derivation। Redux-এ derived value সর্বদা selector/loop — stash duplicates করবেন না।

শেষ প্যারায় নিজে practice করুন — কোড কপি করে নিজের এডিটরে চালিয়ে দেখুন।
আগেরCart Slice — Persistence সহপরেরSlice (Local State) vs RTK Query (Server State)
এই পেজে
Tech Tutor

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

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

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

mdanamolhasan1998@gmail.com