Tipe App Router; komponen server vs klien
Pahami bawaan App Router (komponen server), kapan harus memilih komponen klien, dan cara mengetik penangan rute.
Tipe App Router; komponen server vs klien adalah pelajaran TypeScript Academy gratis di CoddyKit. Ini adalah pelajaran 1 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: Gunakan Perute Aplikasi dengan TypeScript secara percaya diri. Anda akan melihat komponen server sebagai bawaan, memilih komponen klien saat diperlukan, dan mengetik pengendali rute untuk titik akhir API.
- Kemampuan server dibandingkan klien
- Meneruskan properti bertipe di antara keduanya
- NextRequest/NextResponse bertipe
Komponen server
Berkas di bawah app/ secara bawaan merupakan komponen server. Anda dapat menjalankan kode khusus server dan mengambil data sebelum render.
// app/page.tsx (server component by default)
export default async function Page() {
// Server code: read env, fetch data, call DB (conceptually)
const data: { message: string } = { message: "Hello from server component" }
return (
<main style={{ display: "grid", gap: 8 }}>
<h1>Home</h1>
<p>{data.message}</p>
</main>
)
}Komponen klien
Tambahkan direktif "use client" di bagian atas untuk mengaktifkan hook dan penanganan peristiwa. Komponen klien berjalan di peramban.
"use client"
import { useState } from "react"
// app/components/Counter.tsx (client component)
export default function Counter() {
const [n, setN] = useState(0)
return (
<div style={{ display: "flex", gap: 8, alignItems: "center" }}>
<button onClick={() => setN(n - 1)}>-</button>
<span>{n}</span>
<button onClick={() => setN(n + 1)}>+</button>
</div>
)
}Properti server → klien
Hitung data di server dan teruskan sebagai properti bertipe ke komponen klien. Jauhkan logika khusus server dari klien.
// app/page.tsx (server) + client import
import Counter from "./components/Counter"
export default async function Page() {
const initial = 5 // fetched or computed on the server
return (
<main style={{ display: "grid", gap: 12 }}>
<h2>Dashboard</h2>
<CounterWithStart start={initial} />
</main>
)
}
// app/components/CounterWithStart.tsx
"use client"
import { useState } from "react"
export default function CounterWithStart({ start }: { start: number }) {
const [n, setN] = useState(start)
return (
<div style={{ display: "flex", gap: 8, alignItems: "center" }}>
<button onClick={() => setN(n - 1)}>-</button>
<span>{n}</span>
<button onClick={() => setN(n + 1)}>+</button>
</div>
)
}Pengendali rute
Gunakan NextRequest/NextResponse untuk pengendali bertipe di bawah app/api/*/route.ts. Kembalikan JSON dengan kode status.
// app/api/hello/route.ts (App Router API)
import { NextRequest, NextResponse } from "next/server"
export async function GET(req: NextRequest) {
const name = req.nextUrl.searchParams.get("name") ?? "world"
const body: { message: string } = { message: `Hello, ${name}!` }
return NextResponse.json(body, { status: 200 })
}
export async function POST(req: NextRequest) {
const payload = (await req.json()) as { name?: string }
const body = { created: true, name: payload.name ?? "anon" }
return NextResponse.json(body, { status: 201 })
}Kiat
Kiat:
- Secara bawaan, gunakan komponen server; pilih komponen klien hanya saat Anda memerlukan interaksi.
- Jaga agar properti di antara server dan klien tetap kecil serta dapat diserialisasi.
- Gunakan bentuk
NextResponse.jsonbertipe secara konsisten.
Pemeriksaan klien Perute Aplikasi
Pemeriksaan singkat: Bagaimana Anda mengaktifkan hook dalam berkas komponen di bawah Perute Aplikasi?
Ringkasan
Ringkasan: Perute Aplikasi secara bawaan menggunakan komponen server; tambahkan "use client" untuk interaksi, teruskan properti bertipe melintasi batas, dan beri tipe pada pengendali rute dengan NextRequest/NextResponse.
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 “Tipe App Router; komponen server vs klien” gratis?
Ya — teks lengkap “Tipe App Router; komponen server vs klien” 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 “Tipe App Router; komponen server vs klien”?
Pahami bawaan App Router (komponen server), kapan harus memilih komponen klien, dan cara mengetik penangan rute. 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 1 dari 3.
Berapa lama pelajaran “Tipe App Router; komponen server vs klien” 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
- Tipe App Router; komponen server vs klien
- Pengambilan data & pengetikan action
- Pengetikan env dan konfigurasi