标签: next.js

  • Next.js 推荐学习路线

    一、先明确 Next.js 学习前提

    Next.js 是基于 React 的,所以建议你至少掌握一些 React 基础:

    需要先会的 React 内容

    组件
    props
    useState
    useEffect
    事件绑定
    条件渲染
    列表渲染
    表单处理

    不用一开始就把 React 学得特别深,但这些要会。

    如果你已经会一些 JavaScript,那可以直接进入:

    React 基础 -> Next.js

    如果 JavaScript 还不太熟,建议先补:

    ES6 语法
    数组方法
    异步 async/await
    模块导入导出

    二、Next.js 推荐学习路线

    第 1 阶段:创建项目和目录结构

    先创建项目:

    npx create-next-app@latest my-next-app

    推荐选择:

    TypeScript:Yes
    ESLint:Yes
    Tailwind CSS:Yes
    src directory:Yes 或 No 都可以
    App Router:Yes
    Turbopack:可以 Yes
    import alias:Yes

    进入项目:

    cd my-next-app
    npm run dev

    访问:

    http://localhost:3000

    三、先学 App Router

    现在 Next.js 主推 App Router。

    常见目录结构:

    app/
      layout.tsx
      page.tsx
      about/
        page.tsx
      products/
        page.tsx

    对应路由:

    app/page.tsx              -> /
    app/about/page.tsx        -> /about
    app/products/page.tsx     -> /products

    你要先理解:

    page.tsx 是页面
    layout.tsx 是布局
    文件夹名就是路由路径

    例如:

    // app/about/page.tsx
    
    export default function AboutPage() {
      return <h1>关于我们</h1>
    }

    访问:

    /about

    四、学习页面跳转 Link

    Next.js 不需要 React Router,用自己的 Link

    import Link from 'next/link'
    
    export default function HomePage() {
      return (
        <main>
          <h1>首页</h1>
    
          <Link href="/about">去关于页</Link>
        </main>
      )
    }

    五、学习组件拆分

    建议建一个 components 目录:

    components/
      Header.tsx
      Footer.tsx
      ProductCard.tsx

    例如:

    // components/Header.tsx
    
    import Link from 'next/link'
    
    export default function Header() {
      return (
        <header>
          <Link href="/">首页</Link>
          <Link href="/about">关于</Link>
          <Link href="/products">产品</Link>
        </header>
      )
    }

    然后在 layout 里使用:

    // app/layout.tsx
    
    import Header from '@/components/Header'
    
    export default function RootLayout({
      children,
    }: {
      children: React.ReactNode
    }) {
      return (
        <html lang="zh-CN">
          <body>
            <Header />
            {children}
          </body>
        </html>
      )
    }

    六、学习服务端组件和客户端组件

    这是 Next.js 很重要的概念。

    默认情况下,App Router 里面的组件是 服务端组件

    如果你要使用:

    useState
    useEffect
    onClick
    浏览器 API

    就需要加:

    '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>
      )
    }

    简单记:

    只展示内容:通常用服务端组件
    需要交互:使用客户端组件

    七、学习数据请求

    Next.js 可以直接在页面组件里请求数据。

    export default async function UsersPage() {
      const res = await fetch('https://jsonplaceholder.typicode.com/users')
      const users = await res.json()
    
      return (
        <main>
          <h1>用户列表</h1>
          {users.map((user: any) => (
            <div key={user.id}>{user.name}</div>
          ))}
        </main>
      )
    }

    这是服务端请求,适合:

    文章列表
    商品列表
    详情页
    官网内容

    八、学习动态路由

    例如商品详情页:

    app/
      products/
        page.tsx
        [id]/
          page.tsx

    访问:

    /products/1
    /products/2
    /products/100

    页面代码:

    // app/products/[id]/page.tsx
    
    export default function ProductDetailPage({
      params,
    }: {
      params: { id: string }
    }) {
      return <h1>商品详情:{params.id}</h1>
    }

    九、学习 API Route

    Next.js 可以写接口。

    目录:

    app/
      api/
        hello/
          route.ts

    代码:

    // app/api/hello/route.ts
    
    export async function GET() {
      return Response.json({
        message: 'Hello Next.js',
      })
    }

    访问:

    /api/hello

    你可以用它做:

    登录接口
    提交表单
    获取文章
    获取商品

    不过正式项目里,如果后端复杂,通常还是单独后端服务。


    十、推荐做的练手项目

    你可以按难度做。


    项目 1:个人主页 / 作品集网站

    适合入门。

    功能:

    首页
    关于我
    项目展示
    联系方式
    响应式布局
    SEO 标题

    你能练到:

    页面路由
    组件拆分
    layout
    样式
    Link
    Metadata
    部署

    推荐技术:

    Next.js + Tailwind CSS

    项目 2:博客系统

    功能:

    文章列表
    文章详情
    分类
    标签
    Markdown 渲染
    搜索
    SEO

    你能练到:

    动态路由
    数据读取
    服务端组件
    静态生成
    metadata

    可以先做本地 Markdown 版本,不急着接数据库。


    项目 3:商品展示网站

    功能:

    商品列表
    商品详情
    分类筛选
    搜索
    购物车

    你能练到:

    动态路由
    客户端状态
    服务端数据请求
    组件复用

    状态管理可以用:

    useState
    useContext

    后面再加 Zustand。


    项目 4:Todo / 任务管理系统

    功能:

    新增任务
    删除任务
    编辑任务
    状态切换
    筛选任务
    本地存储

    你能练到:

    客户端组件
    useState
    useEffect
    表单处理
    localStorage

    这个适合练交互。


    项目 5:后台管理面板

    功能:

    登录页
    首页仪表盘
    用户列表
    表格
    弹窗
    表单
    分页
    权限菜单

    你能练到:

    UI 组件库
    表单
    表格
    路由组织
    状态管理
    接口请求

    推荐组件库:

    Ant Design

    十一、推荐技术组合

    如果你刚开始,我建议:

    Next.js + TypeScript + Tailwind CSS

    后面再加:

    shadcn/ui
    Zustand
    Prisma
    NextAuth/Auth.js
    PostgreSQL/MySQL

    但是不要一开始全加,不然会很乱。

    入门阶段

    Next.js
    TypeScript
    Tailwind CSS
    fetch

    进阶阶段

    Next.js
    TypeScript
    Tailwind CSS
    Zustand
    shadcn/ui

    全栈阶段

    Next.js
    TypeScript
    Tailwind CSS
    Prisma
    PostgreSQL
    Auth.js

    十二、建议你第一个项目这样做

    我建议你第一个项目做:

    个人作品集网站

    原因:

    页面简单
    容易完成
    适合部署
    可以长期完善
    可以作为你的个人展示

    页面结构:

    /
      首页
    /about
      关于我
    /projects
      项目列表
    /projects/[id]
      项目详情
    /contact
      联系方式

    组件结构:

    components/
      Header.tsx
      Footer.tsx
      ProjectCard.tsx
      SectionTitle.tsx

    数据可以先写死:

    const projects = [
      {
        id: 'next-blog',
        title: 'Next.js 博客系统',
        description: '一个基于 Next.js 的博客项目',
      },
      {
        id: 'admin-dashboard',
        title: '后台管理系统',
        description: '一个后台管理面板项目',
      },
    ]

    十三、你可以按这个计划学习

    第 1 周

    React 基础
    Next.js 创建项目
    页面路由
    Link 跳转
    组件拆分
    Tailwind 基础

    目标:

    做出一个多页面个人网站

    第 2 周

    动态路由
    数据列表
    详情页
    服务端数据请求
    Metadata

    目标:

    做出项目列表 + 项目详情

    第 3 周

    客户端组件
    useState
    表单
    搜索
    筛选
    localStorage

    目标:

    做出 Todo 或商品筛选页面

    第 4 周

    API Route
    提交表单
    简单登录模拟
    部署 Vercel

    目标:

    完成一个可在线访问的小项目

    十四、结论

    你选 Next.js 的学习路线可以是:

    JavaScript 基础
    ↓
    React 基础
    ↓
    Next.js App Router
    ↓
    组件拆分
    ↓
    数据请求
    ↓
    动态路由
    ↓
    客户端组件
    ↓
    API Route
    ↓
    部署项目

    第一个项目推荐:

    个人作品集网站

    第二个项目推荐:

    博客系统

    第三个项目推荐:

    商品展示或后台管理系统

    如果你愿意,我可以下一步直接帮你设计一个 Next.js 入门项目:个人作品集网站 的目录结构、页面规划和第一版代码。