TypeScript Academy · Lektion

Datahämtning och action-typning

Hämta data på servern med typad JSON, styr cachelagring och omvalidering och skapa typade Server Actions för formulär och mutationer.

Lektion 2 av 38 steg

Datahämtning och action-typning är en gratis lektion i TypeScript Academy på CoddyKit. Detta är lektion 2 av 3. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för TypeScript Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i TypeScript Academy innehåller totalt 3 lektioner.

Introduktion

Mål: Hämta data i serverkomponenter med typad JSON, konfigurera cache/revalidate och skapa typade Server Actions för ändringar.

  • Typade fetch-hjälpfunktioner
  • Cache: revalidate kontra no-store
  • Server Actions med formulär

Typad fetch-hjälpfunktion

Skapa en liten json<T>-hjälpfunktion som avkodar svar och kastar fel vid andra statuskoder än 200. Använd revalidate för ISR-liknande cachelagring.

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

Cachekontroller

Använd cache: "no-store" för helt dynamiska förfrågningar, eller next.revalidate för att generera om efter N sekunder.

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

Server Action-modul

Lägg till "use server" i modulen (eller inuti funktionen). Server Actions körs på servern och kan anropa serverspecifika API:er och sedan 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 }
}

Klientformulär med action

Koppla Server Action till ett formulärs action. Använd useTransition för att visa ett vänteläge. Typerna följer från actionens signatur.

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

Tips och säkerhet

Tips:

  • Föredra hämtning på serversidan för hemligheter; skicka resultaten som props.
  • Kasta typade Errors från actions; hantera dem i gränssnittet med boundaries.
  • Generera om berörda sökvägar efter ändringar.

Kontroll av Server Action-typning

Snabb kontroll: Hur markerar du en funktion som en Server Action och bevarar typerna?

Sammanfattning

Sammanfattning: Avkoda JSON med en typad hjälpfunktion, välj no-store eller revalidate med omsorg och använd typade Server Actions för att ändra data och säkert generera om den.

Gratis att börja

Lär dig TypeScript med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
101
Lektioner
352

Vanliga frågor

Är lektionen ”Datahämtning och action-typning” gratis?

Ja – hela texten till ”Datahämtning och action-typning” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i TypeScript Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i TypeScript Academy innehåller totalt 3 lektioner.

Vad lär jag mig i ”Datahämtning och action-typning”?

Hämta data på servern med typad JSON, styr cachelagring och omvalidering och skapa typade Server Actions för formulär och mutationer. Ni övar på TypeScript Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig TypeScript Academy?

Du behöver inga förkunskaper. Utbildningen i TypeScript Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 2 av 3.

Hur lång tid tar lektionen ”Datahämtning och action-typning”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här TypeScript Academy-lektionen?

Ja. Varje TypeScript Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. App Router-typer; server- jämfört med klientkomponenter
  2. Datahämtning och action-typning
  3. Typning av miljövariabler och konfiguration
← Tillbaka till TypeScript Academy