TypeScript Academy · Pelajaran

Pengambilan data & pengetikan action

Ambil data di server dengan JSON bertipe, kendalikan penyimpanan cache/validasi ulang, dan buat Server Actions bertipe untuk formulir serta mutasi.

Pelajaran 2 dari 38 langkah

Pengambilan data & pengetikan action adalah pelajaran TypeScript Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 3. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar TypeScript Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus TypeScript Academy mencakup 3 pelajaran total.

Pendahuluan

Tujuan: Ambil data dalam komponen server dengan JSON bertipe, konfigurasi tembolok/revalidate, dan buat Tindakan Server bertipe untuk mutasi.

  • Pembantu pengambilan data bertipe
  • Tembolok: revalidate vs tanpa penyimpanan
  • Tindakan Server dengan formulir

Pembantu pengambilan data bertipe

Buat pembantu kecil json<T> untuk mendekode respons dan melempar kesalahan pada status selain 200. Gunakan revalidate untuk tembolok yang mirip 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>
  )
}

Kontrol tembolok

Gunakan cache: "no-store" untuk permintaan yang sepenuhnya dinamis; atau next.revalidate untuk membuat ulang setelah N detik.

// 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 } })

Modul Tindakan Server

Tambahkan "use server" di dalam modul (atau di dalam fungsi). Tindakan Server berjalan di server dan dapat memanggil API khusus server, lalu 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 }
}

Formulir klien menggunakan aksi

Ikat Tindakan Server ke action formulir. Gunakan useTransition untuk menampilkan UI yang sedang menunggu. Tipe diturunkan dari tanda tangan aksi.

"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>
  )
}

Kiat & keamanan

Kiat:

  • Utamakan pengambilan data di server untuk rahasia; teruskan hasilnya sebagai properti.
  • Lempar Error bertipe dari aksi; tangani di UI dengan batas.
  • Lakukan validasi ulang pada jalur yang terdampak setelah mutasi.

Pemeriksaan pengetikan Tindakan Server

Pemeriksaan singkat: Bagaimana Anda menandai fungsi sebagai Tindakan Server dan mempertahankan tipenya?

Ringkasan

Ringkasan: Dekode JSON dengan pembantu bertipe, pilih no-store atau revalidate secara bijak, dan gunakan Tindakan Server bertipe untuk melakukan mutasi serta validasi ulang dengan aman.

Gratis untuk memulai

Belajar TypeScript dengan tutor AI — gratis

Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.

Kursus
101
Pelajaran
352

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Pengambilan data & pengetikan action” gratis?

Ya — teks lengkap “Pengambilan data & pengetikan action” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus TypeScript Academy, upgrade ke CoddyKit PRO. Kursus TypeScript Academy mencakup 3 pelajaran total.

Apa yang akan aku pelajari di “Pengambilan data & pengetikan action”?

Ambil data di server dengan JSON bertipe, kendalikan penyimpanan cache/validasi ulang, dan buat Server Actions bertipe untuk formulir serta mutasi. Kamu berlatih TypeScript Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai TypeScript Academy?

Tidak diperlukan pengalaman sebelumnya. TypeScript Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 3.

Berapa lama pelajaran “Pengambilan data & pengetikan action” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran TypeScript Academy ini?

Ya. Setiap pelajaran TypeScript Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Tipe App Router; komponen server vs klien
  2. Pengambilan data & pengetikan action
  3. Pengetikan env dan konfigurasi
← Kembali ke TypeScript Academy