搜索

PythonReactSEOPDF
GitHub Skill

nextjs-data-fetching

Fetch API, Caching, and Revalidation strategies.

HoangNguyen0403☆ 143 仓库 Stars48 仓库 Forks

安装与使用

请根据来源仓库和你的 AI 工具说明安装此技能。先阅读技能文件和依赖要求,再添加到工作流。

查看来源 ↗使用指南

技能说明

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.

    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.

    '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.

使用示例

查看来源仓库中的使用示例与配置说明。

查看来源 ↗

来源历史

收录时间
2026-01-20
索引更新时间
2026-01-26
Branch
main

收录与同步日期属于本站记录。源码修改历史请查看来源仓库。

GitHub ↗

chat Comments (0)

chat_bubble_outline

No comments yet. Be the first to share your thoughts!