Pobieranie danych i typowanie akcji
Pobieranie danych na serwerze z typowanym JSON, kontrolowanie cache'owania i ponownej walidacji oraz tworzenie typowanych Server Actions dla formularzy i mutacji
Pobieranie danych i typowanie akcji to bezpłatna lekcja TypeScript Academy na CoddyKit. To lekcja 2 z 3. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej TypeScript Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs TypeScript Academy zawiera 3 lekcji w sumie.
Wprowadzenie
Cel: Pobierać dane w komponentach serwerowych jako typowany JSON, konfigurować cache/revalidate oraz tworzyć typowane Server Actions do modyfikowania danych.
- Typowane pomocniki fetch
- Cache: revalidate a no-store
- Server Actions z formularzami
Typowany pomocnik fetch
Należy utworzyć niewielki pomocnik json<T>, który dekoduje odpowiedzi i zgłasza wyjątek dla odpowiedzi innych niż 200. Do buforowania w stylu ISR należy używać revalidate.
// 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>
)
}Sterowanie pamięcią podręczną
Dla w pełni dynamicznych żądań należy używać cache: "no-store", a next.revalidate — aby regenerować dane po N sekundach.
// 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 } })Moduł Server Action
W module należy dodać "use server" (albo wewnątrz funkcji). Server Actions działają na serwerze i mogą wywoływać interfejsy API dostępne wyłącznie na serwerze, a następnie 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 }
}Formularz kliencki korzystający z action
Należy powiązać Server Action z atrybutem action formularza. Za pomocą useTransition można wyświetlać interfejs w stanie oczekiwania. Typy są przekazywane z sygnatury akcji.
"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>
)
}Wskazówki i bezpieczeństwo
Wskazówki:
- W przypadku sekretów należy preferować pobieranie danych po stronie serwera i przekazywać wyniki jako właściwości.
- Z akcji należy rzucać typowane obiekty Error, a błędy w interfejsie obsługiwać za pomocą granic.
- Po modyfikacjach danych należy ponownie walidować dotyczące ich ścieżki.
Sprawdzenie typowania Server Action
Szybkie sprawdzenie: Jak oznaczyć funkcję jako Server Action i zachować typowanie?
Podsumowanie
Podsumowanie: Należy dekodować JSON za pomocą typowanego pomocnika, rozsądnie wybierać no-store lub revalidate oraz używać typowanych Server Actions do bezpiecznego modyfikowania danych i ponownej walidacji.
Często zadawane pytania
Czy lekcja „Pobieranie danych i typowanie akcji” jest bezpłatna?
Tak — pełny tekst „Pobieranie danych i typowanie akcji” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu TypeScript Academy, przejdź na CoddyKit PRO. Kurs TypeScript Academy zawiera 3 lekcji w sumie.
Co nauczysz się w „Pobieranie danych i typowanie akcji”?
Pobieranie danych na serwerze z typowanym JSON, kontrolowanie cache'owania i ponownej walidacji oraz tworzenie typowanych Server Actions dla formularzy i mutacji Ćwiczysz TypeScript Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć TypeScript Academy?
Nie wymagamy żadnego doświadczenia. TypeScript Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 3.
Ile czasu zajmuje lekcja „Pobieranie danych i typowanie akcji”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji TypeScript Academy?
Tak. Każda lekcja TypeScript Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Typy App Routera; komponenty serwerowe a klienckie
- Pobieranie danych i typowanie akcji
- Typowanie zmiennych środowiskowych i konfiguracja