2024年03月01日3 分钟

Next.js 14 入门指南

从零开始学习 Next.js 14 App Router,了解服务端组件、路由系统和数据获取

为什么选择 Next.js

Next.js 是目前最流行的 React 全栈框架之一,它提供了许多开箱即用的功能,让前端开发变得更加高效。

核心优势

  • 服务端渲染 (SSR): 提升首屏加载速度和 SEO
  • App Router: 基于文件系统的路由,直观简洁
  • React Server Components: 减少客户端 JavaScript 体积
  • 内置优化: 图片、字体、脚本自动优化

快速开始

使用以下命令创建一个新的 Next.js 项目:

npx create-next-app@latest my-app --typescript --tailwind --app
cd my-app
npm run dev

App Router 基础

Next.js 14 使用 App Router 作为默认路由系统。每个 page.tsx 文件对应一个路由:

// app/page.tsx - 首页 /
export default function Home() {
  return <h1>Welcome</h1>
}

// app/blog/page.tsx - 博客页 /blog
export default function Blog() {
  return <h1>Blog</h1>
}

// app/blog/[slug]/page.tsx - 动态路由 /blog/:slug
export default function Post({ params }: { params: { slug: string } }) {
  return <h1>{params.slug}</h1>
}

服务端 vs 客户端组件

在 App Router 中,组件默认是服务端组件。如果需要使用浏览器 API 或 React hooks,需要在文件顶部添加 'use client' 指令。

'use client'

import { useState } from 'react'

export default function Counter() {
  const [count, setCount] = useState(0)
  return <button onClick={() => setCount(count + 1)}>{count}</button>
}

什么时候用客户端组件

场景推荐
数据获取服务端组件
使用 hooks客户端组件
事件监听客户端组件
SEO 关键内容服务端组件

数据获取

Next.js 14 推荐在服务端组件中直接使用 async/await 获取数据:

async function getData() {
  const res = await fetch('https://api.example.com/data', {
    next: { revalidate: 3600 } // ISR: 每小时重新验证
  })
  return res.json()
}

export default async function Page() {
  const data = await getData()
  return <div>{JSON.stringify(data)}</div>
}

总结

Next.js 14 带来了许多令人兴奋的功能,App Router 和 React Server Components 的结合让全栈开发变得更加流畅。建议从小项目开始实践,逐步深入理解每个特性。

开始动手实践吧,最好的学习方式就是写代码!