mcpField
N
nextjs-best-practices

nextjs-best-practices

github.com/sickn33开发48.7k7.4k 次安装今天更新
代码仓库

关于 nextjs-best-practices

面向 Next.js App Router 开发的实践指南,涵盖组件选择、数据获取、路由、缓存与性能。适合实现或审查 Next.js 应用时参考。

主要功能

  1. 01Server 与 Client Components 选择
  2. 02数据获取与缓存策略
  3. 03App Router 路由组织
  4. 04API Route Handler 实践
  5. 05图片与 Bundle 性能优化
  6. 06Server Actions 安全检查

适用场景

  1. 01规划页面组件的数据加载方式
  2. 02设置缓存与数据重新验证
  3. 03组织并行路由和错误页面
  4. 04检查 Server Action 的输入验证

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/sickn33/agentic-awesome-skills --skill nextjs-best-practices

安装后在 Claude Code 中输入/nextjs-best-practices确认已加载。

详细介绍

Next.js 最佳实践

Next.js App Router 开发原则。


1. 服务端组件与客户端组件

决策树
Does it need...?
│
├── useState, useEffect, event handlers
│   └── Client Component ('use client')
│
├── Direct data fetching, no interactivity
│   └── Server Component (default)
│
└── Both? 
    └── Split: Server parent + Client child
默认情况
类型用途
服务端获取数据、布局、静态内容
客户端表单、按钮、交互式 UI

2. 数据获取模式

获取策略
模式用途
默认取决于版本和配置;当前 fetch 默认不缓存
显式缓存数据可共享时使用 fetch(url, { cache: "force-cache" })
重新验证ISR(按时间刷新)
不存储动态内容(每次请求都获取)
数据流
来源模式
数据库在服务端组件中获取
API使用缓存进行 fetch
用户输入客户端状态 + 服务端操作

3. 路由原则

文件约定
文件用途
page.tsx路由 UI
layout.tsx共享布局
loading.tsx加载状态
error.tsx错误边界
not-found.tsx404 页面
路由组织
模式用途
路由组 (name)不改变 URL 的情况下组织路由
并行路由 @slot同一层级的多个页面
拦截路由 (.)模态覆盖层

4. API 路由

路由处理器
方法用途
GET读取数据
POST创建数据
PUT/PATCH更新数据
DELETE删除数据
最佳实践
  • 使用 Zod 验证输入
  • 返回适当的状态码
  • 妥善处理错误
  • 根据依赖项和部署支持情况选择 Node.js 或 Edge 运行时;不要假设 Edge 上可使用 Node API

5. 性能原则

图像优化
  • 使用 next/image 组件
  • 为首屏内容设置优先级
  • 提供模糊占位图
  • 使用响应式尺寸
包优化
  • 对大型组件使用动态导入
  • 基于路由的代码拆分(自动完成)
  • 使用 bundle analyzer 进行分析

6. 元数据

静态与动态
类型用途
静态导出固定元数据
generateMetadata按路由动态生成
必要标签
  • title(50-60 个字符)
  • description(150-160 个字符)
  • Open Graph 图片
  • 规范 URL

7. 缓存策略

缓存层
层控制方式
请求fetch 选项
数据revalidate/tags
完整路由路由配置
重新验证
方法用途
按时间revalidate: 60
按需revalidatePath/Tag
不缓存no-store

8. 服务端操作

使用场景
  • 表单提交
  • 数据变更
  • 触发重新验证
最佳实践
  • 标记为 'use server'
  • 在服务端对每个操作/处理器进行身份验证和授权;导出的操作是可调用的端点
  • 验证所有输入
  • 返回类型化响应
  • 处理错误

9. 反模式

❌ 不要✅ 应该
到处使用 'use client'默认使用服务端组件
在客户端组件中获取数据在服务端获取数据
跳过加载状态使用 loading.tsx
忽略错误边界使用 error.tsx
生成大型客户端包使用动态导入

10. 项目结构

app/
├── (marketing)/     # Route group
│   └── page.tsx
├── (dashboard)/
│   ├── layout.tsx   # Dashboard layout
│   └── page.tsx
├── api/
│   └── [resource]/
│       └── route.ts
└── components/
    └── ui/

请记住: 服务端组件有其默认使用的理由。从服务端组件开始,仅在需要时添加客户端组件。

适用场景

当需要执行概览中描述的工作流或操作时,可使用此技能。

版本范围

在应用缓存建议之前,请检查已安装的 Next.js 版本以及是否启用了 Cache Components。官方缓存指南 对这些模型作了区分。请明确测试数据新鲜度和失效行为;切勿将用户专属机密或依赖授权的响应放入共享缓存。

限制

  • 仅当任务明确符合上述范围时,才使用此技能。
  • 不要将输出视为特定环境验证、测试或专家评审的替代品。
  • 如果缺少必需的输入、权限、安全边界或成功标准,请停止并请求澄清。

评论

支持 Markdown