Fetch API, Caching, and Revalidation strategies.
Scanned 9/8/2026
Install to Claude Code
npx -y skills add ngxtm/devkit --skill data-fetching --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Data Fetching?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/ngxtm-data-fetching)More formats (shields.io, HTML) on the badges page.
---
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.
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!