0Pricing
TypeScript Academy · บทเรียน

การดึงข้อมูลและการกำหนดชนิดข้อมูลแอ็กชัน

ดึงข้อมูลบนเซิร์ฟเวอร์ด้วย JSON ที่มีชนิดข้อมูล ควบคุมการแคชและการตรวจสอบใหม่ และสร้าง Server Actions ที่มีชนิดข้อมูลสำหรับแบบฟอร์มกับการเปลี่ยนแปลงข้อมูล

การดึงข้อมูลและการกำหนดชนิดข้อมูลแอ็กชัน เป็นบทเรียน TypeScript Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 3 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน TypeScript Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส TypeScript Academy มีบทเรียนทั้งหมด 3 บทเรียน

บทนำ

เป้าหมาย: ดึงข้อมูลในคอมโพเนนต์ฝั่งเซิร์ฟเวอร์ด้วย JSON ที่มีชนิด กำหนดค่าแคช/การสร้างใหม่ และสร้างแอ็กชันฝั่งเซิร์ฟเวอร์ที่มีชนิดสำหรับการเปลี่ยนแปลงข้อมูล

  • ตัวช่วยดึงข้อมูลที่มีชนิด
  • แคช: การสร้างใหม่เทียบกับไม่เก็บข้อมูล
  • แอ็กชันฝั่งเซิร์ฟเวอร์ร่วมกับแบบฟอร์ม

ตัวช่วยดึงข้อมูลที่มีชนิด

สร้างตัวช่วย json<T> ขนาดเล็กเพื่อถอดรหัสการตอบกลับและโยนข้อผิดพลาดเมื่อไม่ใช่ 200 ใช้การสร้างใหม่สำหรับการแคชลักษณะเดียวกับ ISR

// app/lib/http.ts
export async function json<T>(res: Response): Promise<T> {
  if (!res.ok) throw new Error(`HTTP ${res.status}`)
  return (await res.json()) as T
}

// app/page.tsx (server)
export type Post = { id: number; title: string }

export default async function Page() {
  const res = await fetch("https://example.com/api/posts", { next: { revalidate: 60 } })
  const posts = await json<Post[]>(res)
  return (
    <main style={{ display: "grid", gap: 8 }}>
      <h1>Posts</h1>
      <ul>{posts.map(p => <li key={p.id}>{p.title}</li>)}</ul>
    </main>
  )
}

การควบคุมแคช

ใช้ cache: "no-store" สำหรับคำขอที่เปลี่ยนแปลงได้อย่างเต็มที่ หรือใช้ next.revalidate เพื่อสร้างใหม่หลังจากผ่านไป N วินาที

// app/page.tsx (server)
export default async function Page() {
  const res = await fetch("https://example.com/api/now", { cache: "no-store" })
  const data = await res.json() as { now: string }
  return <pre>{JSON.stringify(data, null, 2)}</pre>
}

// Alternative: revalidate per request
// fetch(url, { next: { revalidate: 5 } })

โมดูลแอ็กชันฝั่งเซิร์ฟเวอร์

เพิ่ม "use server" ในโมดูล (หรือภายในฟังก์ชัน) แอ็กชันฝั่งเซิร์ฟเวอร์จะทำงานบนเซิร์ฟเวอร์และเรียกใช้ API เฉพาะฝั่งเซิร์ฟเวอร์ได้ จากนั้นจึงเรียก revalidatePath

// app/actions.ts
"use server"
import { revalidatePath } from "next/cache"

export async function createPost(form: FormData): Promise<{ id: string }> {
  const title = String(form.get("title") || "")
  if (!title) throw new Error("title required")
  // pretend DB insert
  const id = Math.random().toString(36).slice(2)
  revalidatePath("/")
  return { id }
}

แบบฟอร์มฝั่งไคลเอ็นต์ที่ใช้แอ็กชัน

ผูกแอ็กชันฝั่งเซิร์ฟเวอร์เข้ากับ action ของแบบฟอร์ม ใช้ useTransition เพื่อแสดงส่วนติดต่อผู้ใช้ขณะรอดำเนินการ ชนิดจะไหลมาจากลายเซ็นของแอ็กชัน

"use client"
import { useTransition } from "react"
import { createPost } from "../actions"

export default function NewPost() {
  const [pending, start] = useTransition()

  const onSubmit = async (formData: FormData) => {
    await createPost(formData)
  }

  return (
    <form action={(fd) => start(() => onSubmit(fd))} style={{ display: "grid", gap: 8 }}>
      <input name="title" placeholder="Title" />
      <button disabled={pending}>{pending ? "Creating…" : "Create"}</button>
    </form>
  )
}

เคล็ดลับและความปลอดภัย

เคล็ดลับ:

  • เลือกใช้การดึงข้อมูลฝั่งเซิร์ฟเวอร์สำหรับข้อมูลลับ และส่งผลลัพธ์เป็นพร็อพ
  • โยนข้อผิดพลาดที่มีชนิดจากแอ็กชัน และจัดการในส่วนติดต่อผู้ใช้ด้วยขอบเขต
  • สร้างเส้นทางที่ได้รับผลกระทบใหม่หลังการเปลี่ยนแปลงข้อมูล

การตรวจสอบการกำหนดชนิดแอ็กชันฝั่งเซิร์ฟเวอร์

ตรวจสอบอย่างรวดเร็ว: จะทำเครื่องหมายฟังก์ชันให้เป็นแอ็กชันฝั่งเซิร์ฟเวอร์และรักษาชนิดไว้ได้อย่างไร

สรุปทบทวน

สรุปทบทวน: ถอดรหัส JSON ด้วยตัวช่วยที่มีชนิด เลือก no-store หรือ revalidate อย่างเหมาะสม และใช้แอ็กชันฝั่งเซิร์ฟเวอร์ที่มีชนิดเพื่อเปลี่ยนแปลงข้อมูลและสร้างใหม่อย่างปลอดภัย

คำถามที่พบบ่อย

บทเรียน “การดึงข้อมูลและการกำหนดชนิดข้อมูลแอ็กชัน” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การดึงข้อมูลและการกำหนดชนิดข้อมูลแอ็กชัน” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส TypeScript Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส TypeScript Academy มีบทเรียนทั้งหมด 3 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การดึงข้อมูลและการกำหนดชนิดข้อมูลแอ็กชัน”

ดึงข้อมูลบนเซิร์ฟเวอร์ด้วย JSON ที่มีชนิดข้อมูล ควบคุมการแคชและการตรวจสอบใหม่ และสร้าง Server Actions ที่มีชนิดข้อมูลสำหรับแบบฟอร์มกับการเปลี่ยนแปลงข้อมูล คุณปฏิบัติ TypeScript Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน TypeScript Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน TypeScript Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 3 บทเรียน

บทเรียน “การดึงข้อมูลและการกำหนดชนิดข้อมูลแอ็กชัน” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน TypeScript Academy นี้ได้ไหม

ได้ บทเรียน TypeScript Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. ชนิดข้อมูลของ App Router; คอมโพเนนต์ฝั่งเซิร์ฟเวอร์เทียบกับฝั่งไคลเอ็นต์
  2. การดึงข้อมูลและการกำหนดชนิดข้อมูลแอ็กชัน
  3. การกำหนดชนิดข้อมูลตัวแปรสภาพแวดล้อมและการตั้งค่า
← กลับไปที่ TypeScript Academy