界面已本地化;技能介绍与说明文档按所选语言由 AI 自动翻译,代码、命令、路径和专业术语保留原文,以原作者文档为准。
探索技能
数据与研究 · SKILL.md

nextjs-data-fetching

nextjs-data-fetching

【数据与研究】Implement Fetch API, Caching, and Revalidation strategies in Next.js. Use when fetching data, configuring cache behavior, or implementing revalidation in Next.js.

独立 GitHub 快照 · 自动分类 · 以原作者文档为准

技能说明

GitHub

name: nextjs-data-fetching description: Implement Fetch API, Caching, and Revalidation strategies in Next.js. Use when fetching data, configuring cache behavior, or implementing revalidation in Next.js. metadata: triggers: files: - '/*.tsx' - '/service.ts' keywords: - fetch - revalidate - no-store - force-cache

Data Fetching (App Router)

Priority: P0 (CRITICAL)

[!WARNING] Covers App Router fetch only. For pages/ directory: use getServerSideProps / getStaticProps. Ignore native fetch caching advice below.

Fetch data directly in Server Components using async/await.

Strategies

  • Static: Build-time. fetch(url, { cache: 'force-cache' }).
  • Dynamic: Request-time. fetch(url, { cache: 'no-store' }) or cookies().
  • Revalidated: fetch(url, { next: { revalidate: 60 } }).

Patterns

  • Direct Access: Call DB/Service layer directly. ** not fetch your own /api routes.** Example: export default async function Page() { const user = await db.user.findUnique({ where: { id }, select: { id: true, name: true } }); }
  • Colocation: Fetch exactly where data needed.
  • Parallel: Use Promise.all() to prevent waterfalls.
  • Client-Side: Use SWR/React Query for live/per-user data (no SEO).

Revalidation

  • Path: revalidatePath('/path') - Purge cache for route.
  • Tag: revalidateTag('key') - Purge by tag.

Anti-Patterns

  • No root-level awaits: Wrap slow fetches in <Suspense> to avoid blocking.
  • No useEffect for data fetching: Use SWR or React Query for client-side data.
  • No internal API calls from RSC: Fetch from DB/service layer directly.

Examples & References

Canonical response anchors

When this skill applies, preserve the following domain terminology or equivalent concrete examples in the answer when relevant:

  • async function Page()
我的收藏