Next.js14+AppRouterPatterns Next.js14+AppRouterPatterns

Next.js 14+ App Router 是一个专家级框架,用于构建现代 React 应用程序,包含 Server Components、Streaming、Server Actions 和改进的数据获取能力。

前端开发 0 次安装 0 次浏览 更新于 3/5/2026

name: Next.js 14+ App Router Patterns description: 专家级框架,用于使用 Next.js 14+ App Router 构建现代 React 应用程序,包含 Server Components、Streaming、Server Actions 和改进的数据获取能力。

Next.js 14+ App Router Patterns

概览

Next.js 14+ App Router 是一个功能强大的 React 框架,包括 Server Components、Streaming、Server Actions 和改进的数据获取功能。App Router 使用基于文件的路由和嵌套布局,使得构建复杂应用程序更加容易。关键特性包括减少 JavaScript 包的 Server Components,提高性能的 Streaming,用于服务器端功能的 Server Actions,以及优化性能的改进缓存策略。

为什么这很重要

  • 减少上市时间:Next.js 减少开发时间 30-40%
  • 提高性能:Server Components 和 Streaming 提高性能
  • 降低基础设施成本:边缘运行时和缓存降低运营成本
  • 增强 SEO:服务器端渲染提高搜索引擎优化
  • 提高开发体验:强大的特性增加开发人员生产力

核心概念

1. 基于文件的路由

目录基础路由:

  • app/:包含路由的 App Router 目录
  • page.tsx:路由页面组件
  • layout.tsx:包装子路由的布局组件
  • loading.tsx:Suspense 边界的加载 UI
  • error.tsx:错误边界 UI
  • not-found.tsx:404 页面
  • route.ts:API 路由处理器

2. 服务器组件与客户端组件

组件执行模型:

  • 服务器组件(默认):在服务器上渲染,不向客户端发送 JavaScript
  • 客户端组件:在客户端渲染,可以使用钩子和浏览器 API
  • 混合架构:结合服务器和客户端组件以获得最佳性能
  • 组件组合:服务器组件可以导入和使用客户端组件

3. 数据获取

灵活的数据获取模式:

  • 服务器组件:服务器组件直接访问数据库/API
  • fetch() API:内置缓存和重新验证
  • 服务器操作:客户端组件调用的服务器端函数
  • 流式传输:Suspense 的渐进式渲染
  • 缓存:强制缓存、无存储和重新验证选项

4. 路由处理器

API 端点:

  • 路由处理器:app 目录中的 API 路由
  • HTTP 方法:支持 GET、POST、PUT、DELETE、PATCH
  • 动态路由:动态路由参数
  • 中间件:请求/响应拦截
  • CORS:跨源资源共享支持

5. 服务器操作

服务器端变更:

  • 表单处理:表单提交的服务器操作
  • 变更:客户端组件的数据库变更
  • 验证:使用 Zod 进行服务器端验证
  • 重新验证:变更后的缓存失效
  • 渐进增强:无需 JavaScript 即可工作

6. 流式传输和 Suspense

渐进式渲染:

  • Suspense:异步组件边界
  • 流式传输:渐进式 HTML 和数据交付
  • 加载状态:加载 UI 组件
  • 错误边界:错误处理
  • 渐进增强:优雅降级

7. 缓存策略

通过缓存优化:

  • force-cache:默认缓存策略
  • no-store:始终获取最新数据
  • revalidate:基于时间的重新验证
  • on-demand:手动缓存重新验证
  • Tags:基于标签的缓存失效

快速开始

  1. 初始化项目:创建带有 App Router 的 Next.js 项目
  2. 设置 TypeScript:以严格模式配置 TypeScript
  3. 创建布局:使用主题提供程序构建根布局
  4. 构建页面:使用服务器组件创建页面组件
  5. 添加客户端组件:使用客户端组件进行交互性操作
  6. 实现数据获取:在服务器组件中获取数据
  7. 添加流式传输:为渐进式渲染实现 Suspense
  8. 设置 API 路由:为 API 端点创建路由处理器
  9. 添加服务器操作:为变更实现服务器操作
  10. 配置缓存:设置适当的缓存策略
// app/layout.tsx - 根布局
import type { Metadata } from 'next'
import { Inter } from 'next/font/google'
import './globals.css'

const inter = Inter({ subsets: ['latin'] })

export const metadata: Metadata = {
  title: '我的应用程序',
  description: '一个 Next.js 应用程序',
}

export default function RootLayout({
  children
}: {
  children: React.ReactNode
}) {
  return (
    <html lang="en">
      <body className={inter.className}>{children}</body>
    </html>
  )
}

生产检查清单

  • [ ] 配置 App Router 目录结构
  • [ ] 实施带有主题提供程序的根布局
  • [ ] 以严格模式配置 TypeScript
  • [ ] 默认使用服务器组件
  • [ ] 标记客户端组件为 ‘use client’
  • [ ] 使用适当的缓存进行数据获取
  • [ ] 使用 Suspense 边界进行流式传输
  • [ ] 实施加载状态
  • [ ] 配置错误边界
  • [ ] 使用适当的 HTTP 方法的 API 路由
  • [ ] 为变更实现服务器操作
  • [ ] 配置缓存策略
  • [ ] 实施缓存重新验证
  • [ ] 用于认证/授权的中间件
  • [ ] 配置安全头部
  • [ ] 优化性能(捆绑包大小,核心 Web 指标)
  • [ ] 验证可访问性(键盘导航,屏幕阅读器)
  • [ ] 优化 SEO(元数据,结构化数据)

反模式

  1. 过度使用客户端组件:不必要地使用客户端组件会增加捆绑包大小
  2. 缓存策略不当:不使用适当的缓存策略会导致性能问题
  3. 忽视 SEO:不优化服务器端渲染会损害 SEO
  4. 安全问题:不实施安全措施会暴露漏洞
  5. 性能问题:不优化捆绑包大小和渲染会导致加载时间慢
  6. 可访问性问题:不考虑可访问性会限制用户群
  7. 复杂的数据获取:过于复杂的数据获取逻辑难以维护
  8. 缺少错误处理:不实现适当的错误处理会导致糟糕的用户体验
  9. 没有缓存策略:不规划缓存会导致性能问题
  10. 糟糕的路由结构:无组织的目录结构使得维护困难

集成点

  • React:用于组件和钩子的核心 React 库
  • TypeScript:类型安全和接口
  • Tailwind CSS:样式框架
  • Zod:模式验证
  • Prisma:数据库 ORM
  • Vercel:部署平台
  • react-best-practices 用于 React 模式
  • form-handling 用于表单模式
  • api-design 用于 API 设计
  • error-handling 用于错误处理

进一步阅读