التدفق · فصل ٦

الهيدر يعرف إن السلة اتغيرت

CartBadge · cartQueries.current · same query key
🎯 الهدف: تخلي شارة السلة وصفحة السلة والملخص يقروا نفس الاستعلام، من غير ما فيتشر الإضافة تبعت لهم props.

الهيدر فيه Cart Badge، وصفحة Cart، و Cart Summary. كلهم محتاجين نفس بيانات السلة.

بدل ما add-to-cart تبعت Props للهيدر والصفحة، كل واحد يقرأ نفس الـ Query Key.

widgets/header/ui/cart-badge.tsx
import { useQuery } from '@tanstack/react-query';import { cartQueries } from '@/entities/cart';export function CartBadge() {  const { data: cart } = useQuery(    cartQueries.current()  );  const count =    cart?.items.reduce(      (total, item) => total + item.quantity,      0    ) ?? 0;  return <span>{count}</span>;}

لما عملية الإضافة تنجح، invalidateQueries بتعلّم بيانات السلة إنها محتاجة تحديث. React Query تعيد جلبها لو الـ Query نشطة، وتحدّث كل المكونات المشتركة في نفس الكاش.

  • الهيدر يعرض العدد الجديد.
  • صفحة Cart تعرض العناصر الجديدة.
  • Cart Summary يعرض الإجمالي المحدّث.

مفيش اعتماد مباشر بين المكونات دي وبين Feature الإضافة.

خلّصت الفصل لما

🧠 اختبر نفسك
١) الهيدر يستورد useAddToCart؟
لأ. يقرأ cartQueries من @/entities/cart.
٢) ليه الشارة والصفحة يتحدثوا مع بعض؟
لأنهم على نفس الـ Query Key، والـ invalidate يعلّم الكاش ده.