0Pricing
React Academy · درس

الاستعلامات وعمليات Mutation والاشتراكات

استخدم استعلامات tRPC وعمليات Mutation ذات الأنواع من مكوّنات React مع الإكمال التلقائي الكامل وأنواع الأخطاء

الاستعلامات وعمليات Mutation والاشتراكات درس مجاني في React Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في React Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة React Academy 4 دروس في المجموع.

تعريف إجراء استعلام

اربط ‎.input(zodSchema).query(async ({ input, ctx }) => ...)‎ مع publicProcedure. يستقبل المعالج المدخلات التي تم التحقق منها وسياق الطلب. ويمكنه إرجاع أي قيمة قابلة للتسلسل، مثل كائن أو مصفوفة أو قيمة بدائية.

يُستنتج نوع القيمة المرجعة تلقائيًا، ويصبح نوع البيانات لخطاف useQuery المقابل على العميل.

استدعاء استعلام من React

يستدعي trpc.post.getById.useQuery({ id: '1' }) الإجراء getById في موجّه post. ويُرجع الخطاف كائن النتائج المألوف في React Query: { data, isLoading, isError, refetch }.

كائن الإدخال مكتوب بالأنواع بشكل ثابت: تمرير { id: 123 } عندما يتوقع المخطط سلسلة نصية يُعد خطأً في TypeScript يكتشفه أثناء التطوير.

تعريف إجراء mutation

استخدم ‎.input(zodSchema).mutation(async ({ input, ctx }) => ...)‎ لتنفيذ عمليات الكتابة على الخادم، مثل إنشاء البيانات أو تحديثها أو حذفها. تُستدعى عمليات mutation صراحةً، ولا تعمل عند تحميل المكوّن.

يتمتع معالج mutation بإمكانية الوصول إلى سياق الطلب الكامل، بما في ذلك الجلسة من NextAuth، عبر ctx.

استدعاء mutation من React

استخدم const { mutate, isLoading, error } = trpc.post.create.useMutation(). ثم استدعِ mutate({ title: 'New', content: '...' }) لتشغيل عملية mutation. وكما هي الحال مع useMutation في React Query، لا تعمل هذه العملية عند تحميل المكوّن.

مرّر دالتَي الاستدعاء onSuccess وonError إلى خيارات useMutation لتنفيذ الآثار الجانبية بعد عملية mutation.

إبطال ذاكرة التخزين المؤقت بعد mutation

لتحديث بيانات الاستعلام بعد نجاح عملية mutation، استخدم خطاف أدوات tRPC: const utils = trpc.useUtils(). وفي onSuccess، استدعِ utils.post.getAll.invalidate() لإعادة جلب قائمة المنشورات.

هذا هو المكافئ في tRPC للدالة queryClient.invalidateQueries() في React Query، ويتبع النمط نفسه المتمثل في اعتبار البيانات قديمة ثم إعادة جلبها.

التحقق من صحة المدخلات باستخدام Zod

تستخدم tRPC مكتبة Zod للتحقق من صحة المدخلات بشكل افتراضي. يعمل مخطط Zod على الخادم أثناء وقت التشغيل، ويرفض المدخلات غير السليمة قبل وصولها إلى المعالج. كما يوفّر المخطط نفسه أنواع TypeScript للعميل.

يلغي هذا الدور المزدوج، أي التحقق أثناء وقت التشغيل وتوفير أنواع TypeScript، الازدواجية؛ إذ تعرّف العقد مرة واحدة في Zod وتحصل على ضمانَي الأمان معًا.

تجميع الطلبات باستخدام httpBatchLink

تستخدم tRPC افتراضيًا httpBatchLink، الذي يجمع عدة طلبات tRPC متزامنة في طلب HTTP واحد. تُرسل استدعاءات useQuery المتعددة في دورة عرض المكوّن نفسها معًا، وتُعالَج معًا.

يقلل ذلك من الحمل على الشبكة بدرجة كبيرة مقارنةً بإرسال طلب HTTP منفصل لكل استعلام في صفحة تتطلب بيانات متعددة.

نظرة عامة على اشتراكات tRPC

عرّف إجراء اشتراك: publicProcedure.subscription(async function*() { while (true) { yield await nextEvent(); } }). تستخدم الاشتراكات مولدات غير متزامنة، وتتطلب وسيلة نقل عبر WebSocket.

تُعد الاشتراكات مثالية للميزات الفورية، مثل الإشعارات المباشرة ومؤشرات التحرير التعاوني أو استجابات الذكاء الاصطناعي المتدفقة.

إعداد نقل WebSocket

استبدل httpBatchLink بمزيج من httpBatchLink وwsLink باستخدام splitLink: وجّه الاشتراكات إلى wsLink، والاستعلامات وعمليات mutation إلى httpBatchLink. أنشئ عميل WebSocket باستخدام createWSClient({ url: 'ws://localhost:3000' }).

يعني هذا النقل الهجين أن معظم الطلبات تستخدم تجميع HTTP الفعّال، بينما تستخدم الاشتراكات اتصالات WebSocket مستمرة.

استدعاء الاشتراكات من React

يشترك trpc.notifications.onNew.useSubscription(undefined, { onData: (notification) => addToList(notification), onError: console.error }) في الإجراء. ويُستدعى رد النداء onData مع كل قيمة يتم توليدها.

تُعاد تهيئة الاشتراك تلقائيًا إذا انقطع اتصال WebSocket ثم أُعيد الاتصال.

دمج الاستعلامات وعمليات mutation والاشتراكات

قد تستخدم صفحة قائمة فورية استعلامًا لتحميل القائمة الأولية، وعملية mutation لإضافة عنصر، واشتراكًا لتلقي الإضافات المباشرة من المستخدمين الآخرين. وتكون الأنواع الثلاثة مرتبطةً بـ AppRouter نفسه، كما تتكامل طبيعيًا.

تعتمد استراتيجية إبطال ذاكرة التخزين المؤقت على تفضيلك لإعادة الجلب الكامل، عبر الإبطال بعد عملية mutation، أو تحديث ذاكرة التخزين المؤقت، عبر utils.post.getAll.setData.

Mutation في tRPC وإبطال ذاكرة التخزين المؤقت

ما طريقة أداة tRPC التي تؤدي إلى إعادة جلب استعلام بعد نجاح عملية mutation؟

مراجعة الدرس

عرّف الاستعلامات باستخدام ‎.query()‎ وعمليات mutation باستخدام ‎.mutation()‎، مع التحقق من صحة كليهما بواسطة مخططات Zod. وعلى العميل، استخدم trpc.router.procedure.useQuery() وuseMutation(). أبطِل الاستعلامات بعد عملية mutation باستخدام utils.procedure.invalidate(). تستخدم الاشتراكات مولدات غير متزامنة، وتتطلب wsLink لنقل WebSocket.

يجمع httpBatchLink الاستعلامات المتزامنة في طلب HTTP واحد بشكل افتراضي.

الأسئلة الشائعة

هل درس «الاستعلامات وعمليات Mutation والاشتراكات» مجاني؟

نعم — نص درس «الاستعلامات وعمليات Mutation والاشتراكات» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة React Academy، انتقل إلى CoddyKit PRO. تتضمن دورة React Academy 4 دروس في المجموع.

ماذا ستتعلم في «الاستعلامات وعمليات Mutation والاشتراكات»؟

استخدم استعلامات tRPC وعمليات Mutation ذات الأنواع من مكوّنات React مع الإكمال التلقائي الكامل وأنواع الأخطاء تتمرن على React Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ React Academy؟

لا تُشترط خبرة سابقة. React Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.

كم من الوقت يستغرق درس «الاستعلامات وعمليات Mutation والاشتراكات»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس React Academy هذا؟

نعم. كل درس في React Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. المشكلة التي يحلّها tRPC
  2. إعداد tRPC مع React وNext.js
  3. الاستعلامات وعمليات Mutation والاشتراكات
  4. دمج tRPC مع React Query والمصادقة
← العودة إلى React Academy