RTK QueryIntermediate
Mutation: Create Order
useCreateOrderMutation — trigger, unwrap ও clearCart — বাংলায়।
6টি অংশবাংলা ভাষায়
src/features/cart/checkout-button.tsxts
ts
"use client";
import { useAppSelector } from "@/hooks/use-app-selector";
import { useCreateOrderMutation } from "@/features/orders/ordersService";
import { clearCart } from "@/features/cart/cartSlice";
import { useAppDispatch } from "@/hooks/use-app-dispatch";
export function CheckoutButton() {
const dispatch = useAppDispatch();
const items = useAppSelector((state) => state.cart.items);
// hook auto-generated for builder.mutation
const [createOrder, { isLoading, isError, error }] = useCreateOrderMutation();
async function handleCheckout() {
// wrap in try/catch — trigger returns Promise
const result = await createOrder({ items }).unwrap();
// .unwrap() → success = result, error = throw
dispatch(clearCart());
}
return (
<Button
onClick={handleCheckout}
disabled={isLoading || items.length === 0}
>
{isLoading ? "অর্ডার করছি…" : "Checkout"}
</Button>
);
}mutation trigger কী
[trigger, result]array-ভিত্তিক — trigger কল করলে request হয়result.isLoading / isError / error / isSuccess / data- Second call same arg → dedupe হয়; আলাদা arg → new
unwrap()→ success-এ value, failure-এ throw — await-able
ম্যানুয়াল validate
empty cart guardts
ts
if (items.length === 0) {
toast.error("Cart খালি");
return;
}unwrap বা onSuccess
দুই পদ্ধতি — await trigger().unwrap() (ফর্ম/async code-এ ভালো) অথবা trigger()-এর result-এ onSuccess/onError callback। এই কোর্সে unwrap-ই প্রাথমিক — কারণ এতে failure-ও আপনার code-এ ফিরে আসে।
শেষ প্যারায় নিজে practice করুন — কোড কপি করে নিজের এডিটরে চালিয়ে দেখুন।