Busca de dados e tipagem de ações
Busque dados no servidor com JSON tipado, controle o armazenamento em cache/revalidação e crie Server Actions tipadas para formulários e mutações.
Busca de dados e tipagem de ações é uma aula grátis de TypeScript Academy no CoddyKit. Esta é a aula 2 de 3. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de TypeScript Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de TypeScript Academy inclui 3 aulas no total.
Introdução
Objetivo: busque dados em componentes do servidor com JSON tipado, configure o cache/revalidação e crie Ações do Servidor tipadas para mutações.
- Funções auxiliares tipadas para busca
- Cache: revalidação versus sem armazenamento
- Ações do Servidor com formulários
Função auxiliar tipada para busca
Crie uma pequena função auxiliar json<T> para decodificar respostas e lançar uma exceção em respostas diferentes de 200. Use a revalidação para obter um armazenamento em cache semelhante ao ISR.
// 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>
)
}Controles de cache
Use cache: "no-store" para solicitações totalmente dinâmicas; ou next.revalidate para regenerar após N segundos.
// 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 } })Módulo de Ação do Servidor
Adicione "use server" no módulo (ou dentro da função). As Ações do Servidor são executadas no servidor e podem chamar APIs exclusivas do servidor e, em seguida, 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 }
}Formulário do cliente usando uma ação
Vincule a Ação do Servidor à propriedade action de um formulário. Use useTransition para mostrar a interface durante o processamento. Os tipos são obtidos da assinatura da ação.
"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>
)
}Dicas e segurança
Dicas:
- Prefira buscar dados no servidor quando houver segredos; passe os resultados como propriedades.
- Lance Errors tipados a partir das ações; trate-os na interface com limites.
- Revalide os caminhos afetados após as mutações.
Verificação da tipagem de Ações do Servidor
Verificação rápida: como marcar uma função como Ação do Servidor e manter os tipos?
Recapitulação
Recapitulação: decodifique JSON com uma função auxiliar tipada, escolha no-store ou revalidate com critério e use Ações do Servidor tipadas para fazer mutações e revalidar com segurança.
Perguntas Frequentes
A aula “Busca de dados e tipagem de ações” é grátis?
Sim — o texto completo de “Busca de dados e tipagem de ações” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de TypeScript Academy, atualize para CoddyKit PRO. O curso de TypeScript Academy inclui 3 aulas no total.
O que vou aprender em “Busca de dados e tipagem de ações”?
Busque dados no servidor com JSON tipado, controle o armazenamento em cache/revalidação e crie Server Actions tipadas para formulários e mutações. Você pratica TypeScript Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar TypeScript Academy?
Nenhuma experiência prévia é necessária. TypeScript Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 3.
Quanto tempo leva a aula “Busca de dados e tipagem de ações”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de TypeScript Academy?
Sim. Cada aula de TypeScript Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Tipos de App Router; componentes de servidor versus cliente
- Busca de dados e tipagem de ações
- Tipagem de ambiente e configuração