Skip to content
Back to skills

Data Fetching

ASecurity

Fetch API, Caching, and Revalidation strategies.

  • 8 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added September 8, 2026
ai-agentsgonextjsapi

Works with

  • cli
  • api

Security analysis

A100/100

Pro scans all 3 files and shows the line behind each finding

Scanned September 8, 2026

npx -y skills add ngxtm/devkit --skill data-fetching --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Data Fetching?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Data Fetching
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/ngxtm-data-fetching/badge)](https://www.skillsdirectory.com/skills/ngxtm-data-fetching)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: Next.js Data Fetching
description: Fetch API, Caching, and Revalidation strategies.
metadata:
  labels: [nextjs, data-fetching, caching]
  triggers:
    files: ['**/*.tsx', '**/service.ts']
    keywords: [fetch, revalidate, no-store, force-cache]
---

# Data Fetching (App Router)

## **Priority: P0 (CRITICAL)**

Fetch data directly in Server Components using `async/await`.

## Fetch API Extensions

Next.js extends the native `fetch` API for granular caching control.

- **Static (Default)**: `fetch('https://api.com')` -> `cache: 'force-cache'`. Built at build time.
- **Dynamic**: `fetch('...', { cache: 'no-store' })`. Fetched on every request.
- **Revalidated (ISR)**: `fetch('...', { next: { revalidate: 60 } })`. Cached for 60s.

## Patterns

- **Colocation**: Fetch data where it's used. Next.js automatically deduplicates requests for the same URL in the same render pass.
- **Parallel**: Use `Promise.all()` to prevent waterfalls.

  ```tsx
  const [user, posts] = await Promise.all([getUser(), getPosts()]);
  ```

- **Blocking**: To prevent UI blocking, wrap the component in `<Suspense>` and stream the result.

## Revalidation

- **Path**: `revalidatePath('/blog/[slug]')` - Purges cache for specific route.
- **Tag**: `revalidateTag('collection')` - Purges all fetches tagged with `next: { tags: ['collection'] }`.

## Client-Side Fetching (Live Data)

Server Components are the default, but for live/user-specific data that doesn't need SEO:

- **SWR / TanStack Query**: PREFERRED over `useEffect`. Handles caching, polling, and deduplication automatically.

  ```tsx
  'use client';
  import useSWR from 'swr';

  // Good: "Stale-While-Revalidate" - Fast UI, then updates
  const { data } = useSWR('/api/user', fetcher);
  ```

- **Anti-Pattern**: Do not use `useEffect` to fetch data if you can avoid it. It causes "Flash of Loading Content" and waterfalls.

## Anti-Patterns

- **API Routes**: Don't fetch your own API Routes (`/api/...`) from Server Components. Call the DB/Service function directly.

Files in this skill

  • SKILL.md2 KB
  • references/REFERENCE.md332 B
  • references/fetch-patterns.md3.3 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…