0Pricing
TypeScript Academy · Aula

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

  1. Tipos de App Router; componentes de servidor versus cliente
  2. Busca de dados e tipagem de ações
  3. Tipagem de ambiente e configuração
← Voltar para TypeScript Academy