Datan haku ja action-tyypitys
Hakekaa dataa palvelimella tyypitettynä JSONina, hallitkaa välimuistia ja uudelleenvalidointia sekä luokaa tyypitettyjä Server Actioneja lomakkeille ja muutoksille.
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.
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
- App Routerin tyypit; palvelin- ja asiakaskomponentit
- Datan haku ja action-tyypitys
- Ympäristömuuttujien tyypitys ja asetukset