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. Optimistic Update
TanStackAdvanced

Optimistic Update

সার্ভার response-এর আগেই UI আপডেট — snapshot, rollback ও settle pattern — বাংলায়।

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

Optimistic update মানে সার্ভারের জবাবের অপেক্ষা না করে UI-কে আগে বদলে ফেলা — আর অপব্যবহার হলে rollback করা। Delete-তে এটি খুব কার্যকর (UI lag disappears)।

Optimistic deletets
ts
export function useDeleteProductOptimistic() {
  const queryClient = useQueryClient();

  return useMutation({
    mutationFn: (id: string) => deleteProduct(id),

    // 1) UI আগেই বদলে ফেলি
    onMutate: async (id) => {
      await queryClient.cancelQueries({ queryKey: productKeys.all });

      // পুরনো সব list entries snapshot করে রাখি
      const previousEntries = queryClient.getQueriesData({
        queryKey: productKeys.lists(),
      });

      // সব list cache থেকে item সরিয়ে ফেলি
      queryClient.setQueriesData<ProductListResponse>(
        { queryKey: productKeys.lists() },
        (old) => {
          if (!old) return old;
          return {
            ...old,
            items: old.items.filter((p) => p.id !== id),
            total: old.total - 1,
          };
        }
      );

      return { previousEntries };
    },

    // 2) ব্যর্থ হলে রোলব্যাক
    onError: (_error, _id, context) => {
      context?.previousEntries.forEach(([key, data]) => {
        queryClient.setQueryData(key, data);
      });
      toast.error("মুছতে ব্যর্থ — আবার চেষ্টা করুন");
    },

    // 3) শেষে সার্ভার-সত্যে মিলিয়ে নিই
    onSettled: () => {
      queryClient.invalidateQueries({ queryKey: productKeys.all });
    },
  });
}

তিনটি ধাপের গুরুত্ব

ধাপকাজ
onMutatecache cancel, snapshot, optimist UI
onErrorsnapshot ফিরিয়ে rollback + toast
onSettledসবসময় invalidate → server-সত্য আসে

কেন cancelQueries আগে

আগে চলা refetch আমাদের optimistic পরিবর্তনকে ওভাররাইট করতে পারে। cancelQueries সেগুলো বাতিল করে — তাই যতোক্ষণ না mutation শেষ, cache সেই জায়গায় stable থাকে।

সংযমে ব্যবহার

Optimistic সব জায়গায় নয় — যেখানে UI delay স্পষ্ট (delete, toggle) আর rollback সহজ। Create-তে সার্ভার id-এর প্রয়োজন, তাই সাধারণত নন-optimistic + invalidate-এই ভালো।

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

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

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

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

mdanamolhasan1998@gmail.com