การดึงข้อมูลและการกำหนดชนิดข้อมูลแอ็กชัน
ดึงข้อมูลบนเซิร์ฟเวอร์ด้วย 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- ชนิดข้อมูลของ App Router; คอมโพเนนต์ฝั่งเซิร์ฟเวอร์เทียบกับฝั่งไคลเอ็นต์
- การดึงข้อมูลและการกำหนดชนิดข้อมูลแอ็กชัน
- การกำหนดชนิดข้อมูลตัวแปรสภาพแวดล้อมและการตั้งค่า