什么是 Next.js?

本文介绍 Next.js 的核心概念、与 React 的关系以及其主要优势。

📚 学习目标

学完这篇文章后,你将能够:

  • 理解 Next.js 是什么,它与 React 的关系
  • 了解 Next.js 的核心优势
  • 知道为什么企业级应用首选 Next.js
  • 了解本项目的技术栈
  • 掌握 Next.js 的学习路径

前置知识

在开始学习 Next.js 之前,你需要了解:

  • HTML、CSS、JavaScript 基础
  • React 基础(组件、Props、State)

如果你还没有掌握这些知识,建议先学习 React 基础。


1️⃣ Next.js 是什么?

1.1 简单理解

想象一下:

  • React 像是一套乐高积木(组件),让你可以拼出各种 UI
  • Next.js 像是一个完整的乐高套装,包含了积木、说明书、展示台等一切你需要的东西

Next.js 是一个基于 React 的全栈框架,它帮你解决了 React 开发中的很多复杂问题,让你可以专注于业务逻辑。

1.2 技术定义

Next.js 是由 Vercel 公司开发的 React 框架,提供了:

  • 📁 文件系统路由
  • 🌐 服务端渲染 (SSR)
  • ⚡ 静态生成 (SSG)
  • 🔄 增量静态再生 (ISR)
  • 🔌 内置 API Routes
  • 📦 自动代码分割
  • 🖼️ 图片优化
  • 🔍 SEO 友好

2️⃣ Next.js vs React:有什么区别?

2.1 核心区别对比表

特性ReactNext.js
定位UI 库全栈框架
路由需要额外配置(如 React Router)内置文件系统路由
数据获取手动管理内置数据获取、缓存、重验证
渲染方式客户端渲染 (CSR)支持服务端渲染、静态生成等多种方式
API需要后端服务内置 API Routes
SEO较差优秀(支持服务端渲染)
构建优化需要手动配置自动代码分割、懒加载
适用场景小型应用、SPA企业级应用、博客、电商等

2.2 为什么企业级应用选择 Next.js?

  1. 开箱即用:不需要配置路由、数据获取、优化等
  2. SEO 友好:搜索引擎可以抓取内容(因为支持服务端渲染)
  3. 性能优秀:自动优化图片、代码分割、懒加载
  4. 开发效率高:文件系统路由、内置 API、TypeScript 支持
  5. 生态成熟:丰富的插件和工具

3️⃣ 本项目的技术栈

3.1 完整技术栈

本项目使用了以下技术栈:

3.2 技术栈说明

技术版本作用
Next.js16.1.1全栈框架,提供路由、API、渲染等功能
React19.2.0UI 库,构建用户界面
TypeScript5.9.3类型安全的 JavaScript 超集
Tailwind CSS4.1.17实用优先的 CSS 框架
Google Gemini3 ProAI 模型,提供智能对话能力
LangGraphJS1.0.2AI 状态图框架,管理复杂对话逻辑
LangChain1.1.5+AI 应用开发框架,提供工具集成
Supabase2.89.0后端服务,提供数据库、认证等功能

4️⃣ Next.js 的核心优势

4.1 文件系统路由

在 Next.js 中,你只需要在 app 目录下创建文件夹和文件,路由会自动生成。

app/
├── page.tsx              → /
├── about/
│   └── page.tsx          → /about
├── artifact/
│   └── [id]/
│       └── page.tsx      → /artifact/123
└── api/
    └── chat/
        └── route.ts      → /api/chat

4.2 服务端渲染 (SSR)

服务端渲染意味着 HTML 在服务器上生成,然后发送给浏览器。

优势

  • ⚡ 更快的首屏加载速度
  • 🔍 更好的 SEO(搜索引擎可以抓取内容)
  • 📱 更好的用户体验(无需等待 JavaScript 加载)

4.3 内置 API Routes

Next.js 允许你在同一个项目中创建 API 端点,无需单独的后端服务。

例如:app/api/chat/route.ts

import { NextResponse } from 'next/server';

export async function POST(request: Request) {
  const body = await request.json();
  // 处理逻辑...
  return NextResponse.json({ success: true });
}

4.4 自动代码分割

Next.js 会自动将代码分割成小块,只加载用户当前需要的代码。

这意味着:

  • 🚀 更快的页面加载速度
  • 💾 更小的初始 bundle 大小

5️⃣ 实战案例:本项目的页面结构

5.1 主页组件

让我们看看本项目的首页代码:app/page.tsx

'use client';

import { useRef, useMemo, useState, useEffect } from 'react';

// 导入组件
import { ProtectedRoute } from './components/ProtectedRoute';
import SessionSidebar from './components/SessionSidebar';
import { ChatHeader } from './components/ChatHeader';
import { MessageList } from './components/MessageList';
import { ChatInput, type ChatInputHandle } from './components/ChatInput';

// 导入自定义 Hooks
import { useChatMessages } from './hooks/useChatMessages';
import { useSessionManager } from './hooks/useSessionManager';
import { useChatHistory } from './hooks/useChatHistory';
import { useSendMessage } from './hooks/useSendMessage';

/**
 * 聊天页面主组件
 *
 * 该组件是聊天应用的主页面,负责:
 * 1. 整合所有子组件(头部、侧边栏、消息列表、输入框)
 * 2. 管理聊天消息状态
 * 3. 管理会话(session)状态
 * 4. 处理消息发送和历史记录加载
 *
 * 架构说明:
 * - 使用自定义 hooks 分离业务逻辑
 * - 组件只负责 UI 渲染和状态组合
 * - 所有复杂逻辑都封装在 hooks 中
 */
export default function ChatPage() {
  // 组件逻辑...
}

5.2 全局布局

让我们看看全局布局:app/layout.tsx

import type { Metadata } from "next";
import "./globals.css";
import { AuthProvider } from "./contexts/AuthContext";

export const metadata: Metadata = {
  title: "LangGraph Chat App",
  description: "Chat application powered by LangGraph",
};

export default function RootLayout({
  children,
}: Readonly<{
  children: React.ReactNode;
}>) {
  return (
    <html lang="zh-CN">
      <body className="bg-[#050509] text-slate-200 antialiased selection:bg-blue-500/30 overflow-hidden">
        <AuthProvider>
          {children}
        </AuthProvider>
      </body>
    </html>
  );
}

代码解析

  • 这是 Next.js 的Server Component(默认不写 'use client'
  • metadata 导出用于设置页面的 SEO 信息
  • AuthProvider 包裹所有子组件,提供全局认证状态
  • children 是所有子页面组件的占位符

5.3 配置文件

Next.js 配置:next.config.ts

import type { NextConfig } from 'next';

const nextConfig: NextConfig = {
  reactStrictMode: false, // 禁用 React 严格模式
  typescript: {
    // 在构建时忽略 TypeScript 类型错误
    ignoreBuildErrors: true,
  },
  experimental: {
    // 使用系统 TLS 证书以解决网络问题
    turbopackUseSystemTlsCerts: true,
  },
};

export default nextConfig;

代码解析

  • reactStrictMode: false - 开发模式下禁用 React 的严格检查
  • ignoreBuildErrors: true - 构建时忽略 TypeScript 错误(开发阶段使用)
  • turbopackUseSystemTlsCerts: true - 使用系统 TLS 证书(解决某些网络问题)

6️⃣ Next.js 学习路径

6.1 学习阶段规划

6.2 阅读顺序建议

第一阶段:打好基础

  1. 什么是 Next.js?(本文)
  2. 项目结构与配置详解
  3. 路由系统基础

第二阶段:核心功能

  1. API Routes 完全指南
  2. Server vs Client Components
  3. 数据获取模式
  4. 流式响应实现(重点!)

第三阶段:进阶知识

  1. React Hooks 与导航
  2. 中间件与认证模式
  3. 企业级分层架构

第四阶段:综合应用

  1. 完整项目功能复盘

7️⃣ 练习题

  1. 选择题:Next.js 与 React 的主要区别是什么?

    • A. React 是框架,Next.js 是库
    • B. Next.js 包含路由、API 等功能,React 只是 UI 库
    • C. 它们完全相同
    • D. React 比 Next.js 功能更多
  2. 简答题:为什么企业级应用通常选择 Next.js 而不是纯 React?

  3. 代码题:根据 Next.js 的文件系统路由规则,以下文件会生成什么路由?

    app/
    ├── page.tsx
    ├── about/
    │   └── page.tsx
    └── product/
        └── [id]/
            └── page.tsx
  4. 思考题:查看本项目的 app/layout.tsx,它为什么不需要 'use client' 指令?


📚 参考资源

官方文档

本项目相关文件


✅ 总结

Next.js 是一个功能强大的 React 全栈框架,它提供了:

  • 📁 文件系统路由
  • 🌐 服务端渲染
  • 🔌 内置 API Routes
  • ⚡ 自动优化
  • 📦 丰富的生态系统

企业级应用选择 Next.js 的原因

  • 开箱即用,无需繁琐配置
  • SEO 友好,利于搜索引擎抓取
  • 性能优秀,自动优化
  • 开发效率高,生态成熟

本项目的技术栈

  • Next.js 16 + React 19 + TypeScript 5
  • Tailwind CSS 4
  • Google Gemini 3 Pro + LangGraphJS + LangChain
  • Supabase

下一步:阅读下一篇文章《项目结构与配置详解》,深入了解 Next.js 的项目结构。

登录以继续阅读

解锁完整文档、代码示例及更多高级功能。

立即登录

On this page