Communitygithub.com

sakilanwar12/nextjs-typescript-skills

Use ao buscar dados no Next.js App Router — fetch RSC, cache, revalidação, streaming com Suspense, busca paralela ou Route Handlers. Garante comportamento correto de cache e waterfall.

O que é nextjs-typescript-skills?

Esta skill fornece diretrizes especializadas e exemplos práticos para busca de dados no Next.js App Router, utilizando React Server Components. Ela cobre estratégias de cache (cache padrão, `no-store`, revalidação com `revalidate` e `revalidateTag`), paralelização de requisições com `Promise.all` para evitar waterfalls, streaming de seções lentas com `<Suspense>` e `loading.tsx`, e revalidação on-demand via Route Handlers. A skill é útil para desenvolvedores que desejam otimizar o desempenho de páginas Next.js, garantindo que as regras de cache do App Router sejam seguidas corretamente e que a experiência do usuário seja melhorada com carregamento incremental. Ela suporta as plataformas Cursor, Codex e Claude Code, oferecendo um entendimento completo para agentes de IA sobre como implementar busca de dados eficiente e escalável.

Funciona com~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/sakilanwar12/nextjs-typescript-skills/tree/HEAD/skills/nextjs-data-fetching

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

Busca de Dados no Next.js

Regras

  1. Faça fetch em Server Components com async/await. Não use useEffect para dados iniciais.
  2. fetch() é armazenado em cache por padrão no App Router, a menos que { cache: 'no-store' } ou next: { revalidate } indique o contrário. Saiba qual você deseja.
  3. Paralelize requisições independentes com Promise.all. Sequencie apenas quando dependentes.
  4. Envolva seções lentas em <Suspense fallback> + loading.tsx para streaming.
  5. Use next: { tags: ['posts'] } + revalidateTag('posts') para invalidação sob demanda.
  6. Busca no lado do cliente (SWR/React Query) apenas para UI interativa ou filtrada — não para a renderização inicial.

Padrões

// Estático com revalidação (ISR)
async function getPosts() {
  const res = await fetch('https://api.example.com/posts', {
    next: { revalidate: 60 },
  });
  if (!res.ok) throw new Error('Falha ao buscar posts');
  return res.json();
}

// Dinâmico, nunca armazenado em cache
async function getInbox(userId: string) {
  const res = await fetch(`https://api.example.com/inbox/${userId}`, {
    cache: 'no-store',
  });
  return res.json();
}

// Paralelo em um Server Component
export default async function Dashboard() {
  const [user, posts] = await Promise.all([getUser(), getPosts()]);
  return <View user={user} posts={posts} />;
}

// Streaming de uma seção lenta
import { Suspense } from 'react';
export default function Page() {
  return (
    <div>
      <FastHeader />
      <Suspense fallback={<CommentsSkeleton />}>
        <SlowComments />
      </Suspense>
    </div>
  );
}
// app/api/revalidate/route.ts — revalidação sob demanda
import { revalidateTag } from 'next/cache';
export async function POST(req: Request) {
  const { tag, secret } = await req.json();
  if (secret !== process.env.REVALIDATE_SECRET)
    return Response.json({ ok: false }, { status: 401 });
  revalidateTag(tag);
  return Response.json({ ok: true });
}

Checklist

  • Fetch em Server Component, não useEffect?
  • Modo de cache explícito (revalidate, no-store, ou tags)?
  • Requisições independentes paralelizadas?
  • Suspense boundary para partes lentas?
  • Erros tratados (throw → error.tsx, ou fallback gracioso)?

Individual skills in this repo

This repo contains 4 individual skills — each has its own dedicated page.

Habilidades Relacionadas