TypeScript Academy · Oppitunti

Datan haku ja action-tyypitys

Hakekaa dataa palvelimella tyypitettynä JSONina, hallitkaa välimuistia ja uudelleenvalidointia sekä luokaa tyypitettyjä Server Actioneja lomakkeille ja muutoksille.

Oppitunti 2/38 vaihetta

Datan haku ja action-tyypitys on ilmainen TypeScript Academy-oppitunti CoddyKitissä. Tämä on oppitunti 2/3. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu TypeScript Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. TypeScript Academy-kurssilla on yhteensä 3 oppituntia.

Johdanto

Tavoite: Hakekaa tietoja palvelinkomponenteissa tyypitetyn JSONin avulla, määrittäkää cache/revalidate-asetukset ja toteuttakaa muutoksia varten tyypitettyjä Server Actions -toimintoja.

  • Tyypitetyt fetch-apufunktiot
  • Välimuisti: revalidate vai no-store
  • Server Actions lomakkeiden kanssa

Tyypitetty fetch-apufunktio

Luokaa pieni json<T>-apufunktio vastausten purkamiseen ja poikkeuksen heittämiseen, jos vastaus ei ole 200. Käyttäkää revalidate-asetusta ISR:n kaltaiseen välimuistitukseen.

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

Välimuistin hallinta

Käyttäkää cache: "no-store" täysin dynaamisiin pyyntöihin tai next.revalidate uudelleenluontiin N sekunnin kuluttua.

// 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 -moduuli

Lisätkää moduuliin (tai funktion sisälle) "use server". Server Actions suoritetaan palvelimella, ja ne voivat kutsua vain palvelimella käytettäviä API:ja ja sen jälkeen revalidatePath-funktiota.

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

Asiakaspuolen lomake actionilla

Liittäkää Server Action lomakkeen action-attribuuttiin. Käyttäkää useTransition-toimintoa odottavan käyttöliittymän näyttämiseen. Tyypit välittyvät toiminnon allekirjoituksesta.

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

Vinkkejä ja turvallisuus

Vinkkejä:

  • Suosikaa palvelimella tehtävää tiedonhakua salaisuuksien käsittelyssä; välittäkää tulokset propseina.
  • Heittäkää toiminnoista tyypitettyjä Error-virheitä; käsitelkää ne käyttöliittymässä rajojen avulla.
  • Validoikaa muutosten jälkeen kaikki niihin vaikuttavat polut uudelleen.

Server Action -tyypityksen tarkistus

Pikatarkistus: Miten merkitsette funktion Server Actioniksi ja säilytätte tyypit?

Kertaus

Kertaus: Purkakaa JSON tyypitetyllä apufunktiolla, valitkaa no-store tai revalidate harkiten ja käyttäkää tyypitettyjä Server Actions -toimintoja turvalliseen muuttamiseen ja uudelleenvalidointiin.

Aloita maksutta

Opi TypeScript tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
101
Oppitunnit
352

Usein kysytyt kysymykset

Onko oppitunti ”Datan haku ja action-tyypitys” ilmainen?

Kyllä – oppitunnin ”Datan haku ja action-tyypitys” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko TypeScript Academy-kurssin, päivitä CoddyKit PROhon. TypeScript Academy-kurssilla on yhteensä 3 oppituntia.

Mitä opin oppitunnilla ”Datan haku ja action-tyypitys”?

Hakekaa dataa palvelimella tyypitettynä JSONina, hallitkaa välimuistia ja uudelleenvalidointia sekä luokaa tyypitettyjä Server Actioneja lomakkeille ja muutoksille. Harjoittelet TypeScript Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni TypeScript Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin TypeScript Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/3.

Kuinka kauan ”Datan haku ja action-tyypitys”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä TypeScript Academy-oppitunnilla?

Kyllä. Jokainen TypeScript Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. App Routerin tyypit; palvelin- ja asiakaskomponentit
  2. Datan haku ja action-tyypitys
  3. Ympäristömuuttujien tyypitys ja asetukset
← Takaisin: TypeScript Academy