คิวรี การกลายข้อมูล และการสมัครรับข้อมูล
ใช้คิวรีและการกลายข้อมูลแบบมีชนิดของ tRPC จากคอมโพเนนต์ React พร้อมการเติมโค้ดอัตโนมัติและชนิดข้อผิดพลาดอย่างครบถ้วน
คิวรี การกลายข้อมูล และการสมัครรับข้อมูล เป็นบทเรียน React Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน React Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส React Academy มีบทเรียนทั้งหมด 4 บทเรียน
การกำหนดกระบวนการคิวรี
ต่อ .input(zodSchema).query(async ({ input, ctx }) => ...) เข้ากับ publicProcedure ตัวจัดการจะได้รับข้อมูลเข้าที่ผ่านการตรวจสอบแล้วและบริบทของคำขอ ให้ส่งคืนค่าใดก็ได้ที่ทำให้เป็นอนุกรมได้ เช่น ออบเจ็กต์ อาร์เรย์ หรือค่าพื้นฐาน
ชนิดข้อมูลผลลัพธ์จะถูกอนุมานโดยอัตโนมัติ และกลายเป็นชนิดข้อมูลของฮุก useQuery ที่สอดคล้องกันบนไคลเอ็นต์
การเรียกคิวรีจากรีแอ็กต์
trpc.post.getById.useQuery({ id: '1' }) จะเรียกกระบวนการ getById ในเราเตอร์ post ฮุกจะส่งคืนออบเจ็กต์ผลลัพธ์ของรีแอ็กต์คิวรีที่คุ้นเคย: { data, isLoading, isError, refetch }
ออบเจ็กต์ข้อมูลเข้ามีชนิดข้อมูลแบบคงที่: การส่ง { id: 123 } เมื่อสคีมาคาดหวังสตริงจะทำให้เกิดข้อผิดพลาด TypeScript ซึ่งตรวจพบได้ขณะพัฒนา
การกำหนดกระบวนการมิวเทชัน
ใช้ .input(zodSchema).mutation(async ({ input, ctx }) => ...) สำหรับการดำเนินการเขียนข้อมูลฝั่งเซิร์ฟเวอร์ เช่น การสร้าง การอัปเดต หรือการลบข้อมูล มิวเทชันจะถูกเรียกอย่างชัดเจน แทนที่จะทำงานเมื่อคอมโพเนนต์ถูกเมานต์
ตัวจัดการมิวเทชันเข้าถึงบริบทคำขอทั้งหมดได้ (รวมถึงเซสชันจาก NextAuth) ผ่าน ctx
การเรียกมิวเทชันจากรีแอ็กต์
const { mutate, isLoading, error } = trpc.post.create.useMutation() เรียก mutate({ title: 'New', content: '...' }) เพื่อกระตุ้นมิวเทชัน เช่นเดียวกับ useMutation ของรีแอ็กต์คิวรี มิวเทชันจะไม่ทำงานเมื่อคอมโพเนนต์ถูกเมานต์
ส่งฟังก์ชันเรียกกลับ onSuccess และ onError ไปยังตัวเลือกของ useMutation เพื่อจัดการผลข้างเคียงหลังมิวเทชัน
การทำให้แคชใช้ไม่ได้หลังมิวเทชัน
หากต้องการรีเฟรชข้อมูลคิวรีหลังมิวเทชันสำเร็จ ให้ใช้ฮุกยูทิลิตีของ tRPC: const utils = trpc.useUtils() ใน onSuccess ให้เรียก utils.post.getAll.invalidate() เพื่อกระตุ้นการดึงข้อมูลรายการโพสต์ใหม่
นี่คือสิ่งที่เทียบเท่ากับ queryClient.invalidateQueries() ของรีแอ็กต์คิวรี และใช้รูปแบบทำให้ข้อมูลล้าสมัยแล้วดึงข้อมูลใหม่แบบเดียวกัน
การตรวจสอบข้อมูลเข้าด้วย 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 และส่งคิวรี/มิวเทชันไปยัง httpBatchLink สร้างไคลเอ็นต์ WebSocket ด้วย createWSClient({ url: 'ws://localhost:3000' })
การส่งข้อมูลแบบผสมนี้หมายความว่าคำขอส่วนใหญ่จะใช้การรวมคำขอ HTTP ที่มีประสิทธิภาพ ขณะที่การสมัครรับข้อมูลจะใช้การเชื่อมต่อ WebSocket แบบคงอยู่
การเรียกการสมัครรับข้อมูลจากรีแอ็กต์
trpc.notifications.onNew.useSubscription(undefined, { onData: (notification) => addToList(notification), onError: console.error }) จะสมัครรับข้อมูลจากกระบวนการ ฟังก์ชันเรียกกลับ onData จะถูกเรียกสำหรับค่าแต่ละค่าที่ส่งออกมา
การสมัครรับข้อมูลจะถูกสร้างขึ้นใหม่โดยอัตโนมัติหาก WebSocket ถูกตัดการเชื่อมต่อแล้วเชื่อมต่ออีกครั้ง
การรวมคิวรี มิวเทชัน และการสมัครรับข้อมูล
หน้ารายการแบบเรียลไทม์อาจใช้คิวรีเพื่อโหลดรายการเริ่มต้น ใช้มิวเทชันเพื่อเพิ่มรายการ และใช้การสมัครรับข้อมูลเพื่อรับรายการใหม่แบบสดจากผู้ใช้อื่น ทั้งสามรายการใช้ชนิดข้อมูลตาม AppRouter เดียวกันและประกอบเข้าด้วยกันได้อย่างเป็นธรรมชาติ
กลยุทธ์การทำให้แคชใช้ไม่ได้ขึ้นอยู่กับว่าคุณต้องการดึงข้อมูลทั้งหมดใหม่ (ทำให้ใช้ไม่ได้หลังมิวเทชัน) หรืออัปเดตแคช (utils.post.getAll.setData)
มิวเทชันของ tRPC และการทำให้แคชใช้ไม่ได้
เมธอดยูทิลิตีใดของ tRPC ที่กระตุ้นการดึงข้อมูลคิวรีใหม่หลังมิวเทชันทำงานสำเร็จ
ทบทวนบทเรียน
กำหนดคิวรีด้วย .query() และมิวเทชันด้วย .mutation() โดยทั้งสองอย่างผ่านการตรวจสอบด้วยสคีมา Zod บนไคลเอ็นต์ ให้ใช้ trpc.router.procedure.useQuery() และ useMutation() ทำให้คิวรีใช้ไม่ได้หลังมิวเทชันด้วย utils.procedure.invalidate() การสมัครรับข้อมูลใช้ตัวสร้างแบบอะซิงโครนัสและต้องใช้ wsLink สำหรับการส่งข้อมูลผ่าน WebSocket
โดยค่าเริ่มต้น httpBatchLink จะรวมคิวรีที่ทำพร้อมกันให้เป็นคำขอ HTTP เดียว
คำถามที่พบบ่อย
บทเรียน “คิวรี การกลายข้อมูล และการสมัครรับข้อมูล” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “คิวรี การกลายข้อมูล และการสมัครรับข้อมูล” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส React Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส React Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “คิวรี การกลายข้อมูล และการสมัครรับข้อมูล”
ใช้คิวรีและการกลายข้อมูลแบบมีชนิดของ tRPC จากคอมโพเนนต์ React พร้อมการเติมโค้ดอัตโนมัติและชนิดข้อผิดพลาดอย่างครบถ้วน คุณปฏิบัติ React Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน React Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน React Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน
บทเรียน “คิวรี การกลายข้อมูล และการสมัครรับข้อมูล” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน React Academy นี้ได้ไหม
ได้ บทเรียน React Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- ปัญหาที่ tRPC แก้ไข
- การตั้งค่า tRPC ร่วมกับ React และ Next.js
- คิวรี การกลายข้อมูล และการสมัครรับข้อมูล
- การผสาน tRPC กับ React Query และการยืนยันตัวตน