การตั้งค่า tRPC ร่วมกับ React และ Next.js
กำหนดค่าเราเตอร์ tRPC โพรซีเยอร์ และอะแดปเตอร์ไคลเอนต์ React ในโปรเจกต์ Next.js App Router
การตั้งค่า tRPC ร่วมกับ React และ Next.js เป็นบทเรียน React Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน React Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส React Academy มีบทเรียนทั้งหมด 4 บทเรียน
การติดตั้งส่วนพึ่งพาของ tRPC
ติดตั้ง @trpc/server และ @trpc/client สำหรับแพ็กเกจหลักของ tRPC เพิ่ม @trpc/react-query เพื่อใช้เป็นตัวปรับใช้ฮุกของรีแอ็กต์ และเพิ่ม @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 สำหรับจุดปลายทาง hello แบบง่าย ให้ใช้ publicProcedure.input(z.object({ name: z.string() })).query(({ input }) => "Hello " + input.name)
สคีมา Zod จะจัดเตรียมทั้งชนิดข้อมูล TypeScript และการตรวจสอบความถูกต้องของข้อมูลเข้าขณะทำงาน
การสร้างเราเตอร์ของแอป
สร้าง appRouter โดยใช้ฟังก์ชัน router(): router({ hello: helloHandler, users: usersRouter }) เราเตอร์ซ้อนช่วยให้คุณจัดระเบียบกระบวนการตามขอบเขตงาน (ผู้ใช้ โพสต์ ความคิดเห็น) ไว้ในไฟล์แยกกันได้
ส่งออกชนิดข้อมูล AppRouter: export type AppRouter = typeof appRouter ชนิดข้อมูลนี้คือสิ่งที่ไคลเอ็นต์จะนำเข้า
ตัวจัดการเส้นทาง API ของ Next.js
สร้าง app/api/trpc/[trpc]/route.ts (เราเตอร์ของแอป) หรือ pages/api/trpc/[trpc].ts (เราเตอร์ของหน้า) ใช้ fetchRequestHandler จาก @trpc/server/adapters/fetch เพื่อจัดการคำขอ tRPC ทั้งหมดผ่านเส้นทางรวมนี้
ส่งเราเตอร์ ฟังก์ชัน createContext และออบเจ็กต์คำขอ/การตอบกลับให้กับ fetchRequestHandler
การสร้างไคลเอ็นต์ tRPC สำหรับรีแอ็กต์
สร้างไฟล์ 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 หรือฟังก์ชันขอบ) ส่วนไคลเอ็นต์ tRPC ทำงานในเบราว์เซอร์ TypeScript จะประเมินการนำเข้าระดับชนิดข้อมูลขณะสร้างโครงการ โดยไม่เรียกใช้โค้ดเซิร์ฟเวอร์ในเบราว์เซอร์
ไคลเอ็นต์จะนำเข้าเฉพาะชนิดข้อมูล AppRouter ไม่ใช่การนำไปใช้งานจริง ดังนั้นความลับของเซิร์ฟเวอร์จึงไม่รั่วไหลไปยังชุดรวมโค้ดของไคลเอ็นต์
การทดสอบการตั้งค่า
เริ่มเซิร์ฟเวอร์พัฒนาของ Next.js แล้วเปิดคอนโซลของเบราว์เซอร์ การเรียก trpc.hello.useQuery ควรบันทึกการตอบกลับจากเซิร์ฟเวอร์ ตรวจสอบแท็บเครือข่ายเพื่อดูคำขอ 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” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส React Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส React Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การตั้งค่า tRPC ร่วมกับ React และ Next.js”
กำหนดค่าเราเตอร์ tRPC โพรซีเยอร์ และอะแดปเตอร์ไคลเอนต์ React ในโปรเจกต์ Next.js App Router คุณปฏิบัติ React Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน React Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน React Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “การตั้งค่า tRPC ร่วมกับ React และ Next.js” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน React Academy นี้ได้ไหม
ได้ บทเรียน React Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- ปัญหาที่ tRPC แก้ไข
- การตั้งค่า tRPC ร่วมกับ React และ Next.js
- คิวรี การกลายข้อมูล และการสมัครรับข้อมูล
- การผสาน tRPC กับ React Query และการยืนยันตัวตน