标准答案

  1. React SPA 通常只有一个 HTML 入口,路由由客户端 React Router 接管,页面内容主要在浏览器运行后生成。
  2. Next.js 提供约定式路由、服务端渲染、静态生成、API 路由或服务端能力,适合内容、SEO、首屏和全栈场景。
  3. 渲染模式上,SPA 主要是 CSR;Next.js 可以按页面或组件选择 SSR、SSG、ISR、CSR,以及 App Router 下的 Server Components。
  4. SEO 上,Next.js 更容易在首屏 HTML 中输出标题、描述、结构化内容和可索引主体;SPA 需要额外预渲染或 SSR 支持。
  5. 选择时要看业务目标:后台系统未必需要 Next.js,内容站、营销页、文档、需要搜索流量的页面更适合考虑 Next.js。

题目解析

这道题不应该回答成 Next.js 一定优于 SPA。两者解决的问题不同。

SPA 的优势是模型简单、部署直接、适合强登录后的应用;Next.js 的优势是渲染模式丰富、SEO 和首屏能力更强。

Next.js 增加了服务端和客户端边界,团队要理解数据获取、缓存、hydration、运行时和部署平台差异。

代码示例

下面的 Next.js 页面可以在服务端生成元信息,而 SPA 通常需要客户端运行后再补充内容。

TSX
export async function generateMetadata({ params }: PageProps) {
  const article = await getArticle(params.slug)

  return {
    title: article.title,
    description: article.excerpt
  }
}

export default async function ArticlePage({ params }: PageProps) {
  const article = await getArticle(params.slug)

  return <article>{article.title}</article>
}

常见误区

  • 认为 Next.js 只是 React Router 的文件路由版本。
  • 所有 React 项目都默认上 Next.js,不评估 SEO、首屏、部署和团队成本。
  • 在 Next.js 里混淆服务端组件和客户端组件边界,随意使用 window 或浏览器 API。

作者信息