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. Optimistic Update — onQueryStarted
RTK QueryAdvanced

Optimistic Update — onQueryStarted

প্যাচ-ভিত্তিক optimistic UI, rollback ও invalidate — বাংলায়।

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

RTK Query-তে optimistische update-এর স্থান mutation-এর `onQueryStarted`-এ। server-এর জবাবের আগেই আমরা local cache-টা update - করি, আর queryFulfilled এ রেসস করুন।

Optimistic delete (updateQueryData)ts
ts
deleteProduct: builder.mutation<void, string>({
  query: (id) => ({ url: "products/" + id, method: "DELETE" }),

  async onQueryStarted(id, { dispatch, queryFulfilled }) {
    // 1) UI-তে আগেই remove
    const patchResult = dispatch(
      ordersApi.util.updateQueryData(
        "getProducts",      // endpoint
        undefined,          // arg
        (draft) => {
          const idx = draft.findIndex((p) => p.id === id);
          if (idx >= 0) draft.splice(idx, 1);
        },
      ),
    );

    try {
      await queryFulfilled;
      // 2) server নিশ্চিত → tags-ও invalidate (সার্ভার-সত্যে মিলে)
      dispatch(ordersApi.util.invalidateTags(["Product"]));
    } catch {
      // 3) ব্যর্থ → আগের cache ফিরিয়ে (rollback)
      patchResult.undo();
    }
  },
}),

updateQueryData কী

  • util.updateQueryData(endpoint, args, updater) — cache-এ draft-based patch
  • Returned patchResult — .undo() rollback
  • Queries-মাউন্ট থাকলে instant UI, background refetch হয়নি
  • কোনো অবশ্য refetch-এর নিশ্চয়তা না থাকলে mutation-সফলতা-পর্যন্ত cache-জাত স্থিতি — তাই queryFulfilled-এ আমরা নিজে invalidate করি
কখন নয়

Optimistic শুধু reversible & good-feedback scenarios-এ। Create-তে সার্ভার থেকে id আসে — সাধারণত normalize-নিশ্চিত না হলে optimistic skip করুন। Delete/toggle-এর জন্য দারুণ।

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

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

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

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

mdanamolhasan1998@gmail.com