MD 状态:🌿 分类:前端框架 更新:2026/5/29

Next.js

[!abstract] 一句话定义 Next.js 是一个基于 React 的全栈 Web 框架,它通过内置的服务端渲染、路由系统和优化工具,让开发者无需手动配置就能构建生产级应用。

为什么需要它?

纯 React 应用(SPA)有两个致命问题:SEO 不友好 —— 搜索引擎爬虫看到的是空白页面,因为内容需要 JavaScript 执行后才能渲染;首屏性能差 —— 用户必须等待整个 JavaScript 包下载执行后才能看到内容。Next.js 通过**服务端渲染(SSR)静态生成(SSG)**解决了这些问题,让页面在到达用户浏览器前就已经是完整的 HTML。

核心直觉

把 Next.js 想象成一个智能餐厅

  • 纯 React SPA = 自助厨房(食材给你,自己做,上菜慢,外卖小哥找不到门牌号)
  • Next.js = 智能餐厅(厨师提前做好(SSG)或现做(SSR),上菜快,外卖小哥能直接找到门牌号(SEO))

关键区别:Next.js 让 React 应用从”客户端渲染”变成了”服务端渲染 + 客户端 hydration”。

它是怎么工作的?

整体架构

graph TB
    subgraph 用户请求
        A[浏览器] -->|HTTP 请求| B[Next.js 服务器]
    end
    
    subgraph 服务端处理
        B --> C{路由匹配}
        C -->|静态页面| D[返回预生成的 HTML]
        C -->|动态页面| E[服务端渲染 React 组件]
        C -->|API 请求| F[执行 API Route]
    end
    
    subgraph 客户端处理
        D --> G[HTML + JS 发送到浏览器]
        E --> G
        F --> H[返回 JSON 数据]
        G --> I[Hydration: React 接管交互]
    end
    
    style A fill:#e1f5fe
    style B fill:#f3e5f5
    style I fill:#c8e6c9

渲染策略

Next.js 提供三种渲染策略,开发者可以根据页面特性选择:

graph LR
    A[页面组件] --> B{渲染策略}
    B --> C[SSG<br/>静态生成]
    B --> D[SSR<br/>服务端渲染]
    B --> E[ISR<br/>增量静态再生]
    
    C --> F[构建时生成 HTML<br/>适合不常变化的内容]
    D --> G[请求时生成 HTML<br/>适合个性化内容]
    E --> H[构建时生成 + 定期更新<br/>适合偶尔变化的内容]

1. 静态生成(SSG)

// pages/blog/[slug].js
export async function getStaticProps({ params }) {
  const post = await getPost(params.slug);
  return { props: { post } };
}

export async function getStaticPaths() {
  const posts = await getAllPosts();
  return {
    paths: posts.map(p => ({ params: { slug: p.slug } })),
    fallback: false,
  };
}

2. 服务端渲染(SSR)

// pages/dashboard.js
export async function getServerSideProps(context) {
  const user = await getUser(context.req.cookies.token);
  return { props: { user } };
}

3. 增量静态再生(ISR)

// pages/products/[id].js
export async function getStaticProps({ params }) {
  const product = await getProduct(params.id);
  return {
    props: { product },
    revalidate: 60, // 每 60 秒重新生成
  };
}

关键组件 / 核心要素

组件作用类比
App Router基于文件系统的路由,支持 React Server Components餐厅的楼层导航图,自动根据文件位置生成
页面(Pages)每个文件对应一个路由,导出 React 组件餐厅的每道菜,有自己的位置和内容
布局(Layouts)嵌套布局,页面间共享 UI 结构餐厅的桌椅布置,每桌都有但可以定制
API Routes服务端 API 端点,无需单独后端服务餐厅的后厨,处理特殊请求
中间件(Middleware)请求到达前的拦截和处理餐厅的迎宾员,检查预约、重定向
图片优化自动优化图片格式、大小、懒加载餐厅的摆盘,根据盘子大小调整菜品

与相关概念的关系

[!info] vs React React 是 UI 库,只负责渲染组件;Next.js 是基于 React 的框架,提供了路由、渲染策略、优化工具等完整解决方案。React 像是发动机,Next.js 是整辆车。

[!info] vs Nuxt.js Nuxt.js 是 Vue 生态的全栈框架,功能类似 Next.js。选择取决于团队技术栈:React 团队选 Next.js,Vue 团队选 Nuxt.js。

[!info] vs Remix Remix 也是 React 全栈框架,但更强调 Web 标准(Fetch API、FormData)和嵌套路由。Next.js 生态更大,Remix 更”Web 原生”。

[!note] 依赖于 React Next.js 的核心是 React,所有组件都是 React 组件。理解 React 的组件、状态、生命周期是使用 Next.js 的前提。

[!tip] 被 Vercel 部署优化 Next.js 由 Vercel 公司开发,部署到 Vercel 平台时有最佳性能优化(边缘网络、自动 ISR 等)。

典型应用场景

  • 企业官网 / 营销页面 — 需要 SEO,内容不常变化,用 SSG 构建时生成,性能最优
  • 电商产品页 — 产品信息偶尔更新,用 ISR 定期重新生成,兼顾性能和新鲜度
  • 后台管理系统 — 个性化数据,用 SSR 每次请求时渲染,确保数据实时
  • 博客 / 文档站 — 内容为主,Markdown 渲染,用 SSG + ISR 组合
  • 全栈应用 — 利用 API Routes 构建后端,无需单独部署后端服务

常见误解与陷阱

[!danger] ❌ 误以为:Next.js 只能做 SSR ✅ 实际上:Next.js 支持 SSG、SSR、ISR 三种策略,甚至可以纯客户端渲染(SPA 模式)。选择哪种取决于页面需求。

[!danger] ❌ 误以为:用了 Next.js 就自动 SEO 好 ✅ 实际上:SEO 取决于内容和元数据配置。Next.js 提供了 <Head> 组件和 metadata API,但需要开发者正确使用。

[!danger] ❌ 误以为:App Router 和 Pages Router 可以混用 ✅ 实际上:虽然技术上可以共存,但官方建议统一使用 App Router(新项目)或 Pages Router(老项目维护)。混用会增加复杂度。

[!danger] ❌ 误以为:getServerSideProps 比 getStaticProps 快 ✅ 实际上:SSG(getStaticProps)在构建时生成,访问时直接返回静态文件,通常比 SSR(getServerSideProps)更快。SSR 每次请求都要执行服务端逻辑。

延伸阅读

  • 想深入理解原理 → 学习 React Server Components、流式渲染、边缘计算
  • 想看工程实践 → 研究 Next.js 官方示例、Vercel 模板库
  • 想了解前沿进展 → 关注 App Router 的 Server Actions、Partial Prerendering

关联笔记

前置知识React · JavaScript · Node.js 同族概念Nuxt.js · Remix · Gatsby · Astro 应用场景前后端分离 · SEO优化 · 静态站点生成 · 全栈开发 部署平台Vercel · Netlify · Docker