0Pricing
TypeScript Academy · Lekcja

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

  1. Typy App Routera; komponenty serwerowe a klienckie
  2. Pobieranie danych i typowanie akcji
  3. Typowanie zmiennych środowiskowych i konfiguracja
← Powrót do TypeScript Academy