إعداد tRPC مع React وNext.js
اضبط موجّه tRPC وإجراءاته ومحوّل عميل React في مشروع Next.js يستخدم App Router
إعداد tRPC مع React وNext.js درس مجاني في React Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في React Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة React Academy 4 دروس في المجموع.
تثبيت تبعيات tRPC
ثبّت @trpc/server و@trpc/client لاستخدام حزمتَي tRPC الأساسيتين. أضف @trpc/react-query لتوفير محوّل خطافات React، وأضف @tanstack/react-query باعتبارها التبعية النظيرة التي تشغّل هذه الخطافات.
لا تحتاج إلى حزمة محوّل إضافية لدمج مسارات API في Next.js في الإصدارات الحديثة من tRPC.
تهيئة tRPC على الخادم
أنشئ الملف server/trpc.ts واستدعِ initTRPC.create() للحصول على الكائن t. صدّر t.router باسم router، وt.procedure باسم publicProcedure، وt.mergeRouters باعتبارها أداة مساعدة.
يقبل مصنع initTRPC معاملًا عامًا لنوع السياق، يحدّد البيانات المتاحة في وسيط ctx لكل إجراء.
تعريف أول إجراء لك
يُعرَّف الإجراء بربط .input(zodSchema).query(handler) أو .mutation(handler) مع publicProcedure. ولإنشاء نقطة نهاية بسيطة للتحية، استخدم: publicProcedure.input(z.object({ name: z.string() })).query(({ input }) => "Hello " + input.name).
يوفّر مخطط Zod أنواع TypeScript والتحقق من صحة المدخلات أثناء وقت التشغيل معًا.
بناء موجّه التطبيق
أنشئ appRouter باستخدام الدالة router(): router({ hello: helloHandler, users: usersRouter }). تتيح لك الموجّهات المتداخلة تنظيم الإجراءات حسب المجال، مثل users وposts وcomments، في ملفات منفصلة.
صدّر نوع AppRouter: export type AppRouter = typeof appRouter. هذا هو النوع الذي سيستورده العميل.
معالج مسار API في Next.js
أنشئ app/api/trpc/[trpc]/route.ts (موجّه App Router) أو pages/api/trpc/[trpc].ts (موجّه Pages Router). استخدم fetchRequestHandler من @trpc/server/adapters/fetch لمعالجة جميع طلبات tRPC عبر هذا المسار الشامل الواحد.
مرّر الموجّه ودالة createContext وكائنَي الطلب والاستجابة إلى fetchRequestHandler.
إنشاء عميل tRPC لـ React
أنشئ الملف utils/trpc.ts. استدعِ createTRPCReact
يُستورَد النوع AppRouter من ملف الخادم، ويتتبع TypeScript سلسلة الاستيرادات للتحقق من صحة جميع الاستخدامات.
إعداد QueryClient وTRPCProvider
في تخطيط التطبيق أو _app.tsx، أنشئ نسخة من QueryClient ونسخة من عميل tRPC باستخدام trpc.createClient({ links: [httpBatchLink({ url: '/api/trpc' })] }).
غلّف شجرة مكوّناتك داخل كلٍّ من trpc.Provider، مع تمرير عميل trpc، وQueryClientProvider، مع تمرير QueryClient. كلا الموفّرين مطلوبان.
تنفيذ أول استعلام tRPC لك
في أي مكوّن، استخدم: const { data, isLoading, error } = trpc.hello.useQuery({ name: 'World' }). الخطاف مكتوب بالأنواع بالكامل: تمثّل data نوع القيمة المرجعة المستنتج من إجراء hello، ويُتحقَّق من نوع كائن الإدخال مقابل مخطط Zod.
يؤدي تمرير نوع إدخال غير صحيح إلى خطأ في تجميع TypeScript، وليس إلى خطأ أثناء وقت التشغيل.
مراجع مشاريع TypeScript
لكي تعمل tRPC، يجب أن يتمكّن العميل من استيراد الأنواع من ملف الخادم. في مشروع Next.js، يشترك رمز الخادم والعميل في عملية تجميع TypeScript نفسها، لذلك تعمل الاستيرادات مباشرةً.
في مستودع أحادي يضم حزمًا منفصلة، اضبط مراجع مشاريع TypeScript أو بدائل المسارات في tsconfig.json للإشارة إلى حزمة الخادم.
الاختلافات بين البيئات
يعمل معالج tRPC على الخادم، سواء باعتباره مسار API في Next.js أو Edge Function. ويعمل عميل tRPC في المتصفح. يقيّم TypeScript الاستيرادات على مستوى الأنواع أثناء وقت البناء، من دون تنفيذ رمز الخادم في المتصفح.
يُستورَد نوع AppRouter فقط على العميل، وليس التنفيذ الفعلي، لذلك لا تتسرّب أسرار الخادم إلى حزمة العميل.
اختبار الإعداد
شغّل خادم التطوير في Next.js وافتح وحدة تحكم المتصفح. من المفترض أن يسجّل استدعاء trpc.hello.useQuery استجابة الخادم. تحقّق من علامة تبويب Network لرؤية طلب HTTP إلى /api/trpc/hello، مع تجميع المدخلات في مَعلمة استعلام.
يجمع httpBatchLink الافتراضي عدة طلبات متزامنة في استدعاء HTTP واحد، ويمكن رؤية ذلك في مخطط تسلسل طلبات الشبكة.
إعداد موجّه خادم tRPC
ما الدالة التي تهيّئ نسخة tRPC وتوفّر مصنعي الموجّه والإجراء؟
مراجعة الدرس
ثبّت @trpc/server و@trpc/client و@trpc/react-query و@tanstack/react-query. هيّئ tRPC باستخدام initTRPC.create()، وعرّف الإجراءات، وصدّر نوع AppRouter. أنشئ مسار API الشامل في Next.js، وأعدّ TRPCProvider وQueryClientProvider، ثم استدعِ الإجراءات باستخدام trpc.procedureName.useQuery().
يفرض TypeScript عقد الخادم والعميل بالكامل أثناء وقت التجميع، من دون توليد التعليمات البرمجية.
الأسئلة الشائعة
هل درس «إعداد tRPC مع React وNext.js» مجاني؟
نعم — نص درس «إعداد tRPC مع React وNext.js» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة React Academy، انتقل إلى CoddyKit PRO. تتضمن دورة React Academy 4 دروس في المجموع.
ماذا ستتعلم في «إعداد tRPC مع React وNext.js»؟
اضبط موجّه tRPC وإجراءاته ومحوّل عميل React في مشروع Next.js يستخدم App Router تتمرن على React Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ React Academy؟
لا تُشترط خبرة سابقة. React Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «إعداد tRPC مع React وNext.js»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس React Academy هذا؟
نعم. كل درس في React Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- المشكلة التي يحلّها tRPC
- إعداد tRPC مع React وNext.js
- الاستعلامات وعمليات Mutation والاشتراكات
- دمج tRPC مع React Query والمصادقة