Next.js入门教程 新手学编程必看简单指南

阿木 发布于 20 小时前 2 次阅读


在2026年刚开始的时候,有这样一个情况,Next.js在全球范围内的下载量突破了每月2000万次,并且在GitHub上的星标数超过了React Router和Gatsby两者的总和。当越来越多的中国开发者从Create React App转向Next.js的时候,我们有理由进行一番询问,这个框架到底解决了什么样的实实在在的问题呢,还是说它仅仅只是又一个技术方面的时髦事物呢?

为什么要学Next.js而不是死磕原生React

单页应用历经十年发展,其痛点始终未曾消失,你开启一个React电商页面,三秒之内仅能瞧见白屏以及loading,这便是客户端渲染所付出的代价,2025年HTTP Archive数据表明,移动端React应用首屏加载中位数依旧处于2.8秒。

Next.js 的核心价值所在乃是给予 React 一整套默认的优化方案,你无需自行去纠结究竟该采用客户端渲染还是服务端渲染,无需自行去搭建 Webpack 配置代码分割,无需为了 SEO 专门去撰写一套静态页,它将往昔唯有大厂才养得起的前端基建团队的工作,封装成了几行配置。

更为关键的是,它使得全栈开发所需跨越的障碍得以降低,原本你需要单独去构建一个Node服务,或者撰写云函数用以应对API,当前直接在pages/api里进行书写便能够顺利运行,对于个人性质的开发者以及小阵列状的团队来说,这属于切实存在的成本节省。

零到一搭建开发环境的实际步骤

想要使用,Node.js的18.17以及比这更高的版本是硬性规定的门槛,建议直接采用20.11 LTS版本。众多刚开始学习的人在npx命令出现报错这种情况,卡在这里,实际上八成是因为Node版本太过老旧还是npm缓存引发的问题,通过用nvm去安装最新的LTS版本就能够将其解决。

node -v
npm -v

构建项目之际,当运用create - next - app创设项目时光,需留意,于2026年它会将Turbopack当作打包器予以默认启用。要是你遭遇热更新失效这种状况,那就得去查验next.config.js是否明确关闭了turbo此功能。对于依赖安装来说,建议采用pnpm而非npm,如此一来磁盘占用能够减少60%以上,特别是在多人协作这种情形下版本锁更为可靠一些。

npm install -g create-next-app

自己无需去折腾项目目录那种结构,虽说其pages路由被App Router给进行了分流,然则对于初学者来讲,依旧是推荐从pages着手开始,它具备直观的特性而且文档成熟,等你弄明白文件就是路由的这个概念之后,再切换到App Router就会顺畅许多。

静态生成和SSR选哪个才不浪费钱

create-next-app my-next-app

诸多教程向你表明SSR不错、静态生成挺不错,可却从不向你讲清楚该如何去选择。其判断的标准是颇为简单的:要是数据对于每一位用户而言都是相同的,那就进行静态生成;要是数据因不同用户而存在差异或者对于实时性有着较高的要求,那就采用SSR。

cd my-next-app

去年,我针对一个旅游资讯站开展重构方面的工作,其中目的地介绍页采用静态生成的方式,待构建之时,进行一次数据拉取操作从而生成HTML,之后将其托管于Vercel边缘网络,最终全球加载时间由原本的1.8秒成功降低至0.3秒。至于机票比价页的情况,因其价格每一秒都会出现变化,所以必须运用SSR。

npm install

静态生成存在着一个容易被人忽视的好处,那便是省钱,要是你运用传统服务器去运行SSR,当并发一千个请求之时,就要对一千次页面组装进行处理,而静态文件是直接由CDN予以响应的,服务器仅仅负责构建时的一次计算,2025年AWS re:Invent公布的数据表明,在静态页面每月流量低于100GB的时候,甚至能够完全免费。

API路由解决了后端不会写的尴尬

Next.js所具备的内置API路由,并非是要让你去取代Java或者Go,而是用于解决两类不同的场景,其一处于BFF层面,也就是去聚合向后的多个接口,并且裁剪字段以供前端使用,其二处于原型验证阶段,在此阶段不需要单独开展后端服务的部署。

我于pages/api/contact.js处撰写一个POST接口,在接收表单数据之后调用邮件服务,共计二十行代码便上线了一项反馈功能。往昔这般情形需开启一个Express项目,开展配置跨域操作、进行body解析以及部署环境等事宜,折腾一番就得耗费半天时间。

可是得留意,API路由并不适宜用于计算密集型的任务。存在有人运用它去开展图片处理操作,结果因其使用Vercel免费套餐时存在10秒的超时限制,这直接致使任务遭遇失败。对于长任务而言,应当采用云函数或者队列服务,而切不可强行将其塞给Next.js。

import { useRouter } from 'next/router'
export async function getStaticProps() {
  return {
    props: {
      // 页面渲染所需的数据
    }
  }
}
export async function getServerSideProps(context) {
  return {
    props: {
      // 页面渲染所需的数据
    }
  }
}

动态路由在实际项目中的正确姿势

动态路由并非仅仅是为了让URL看上去美观,有一群开发者,他们使用?id=123这种方式来传递参数,接着在useEffect里面去执行fetch数据的操作,然而,这样做的后果是,SEO无法抓取到对应的内容,而且分享链接也不存在预览图。

具体的正确做法是,采用[slug].js这样的形式来命名文件,于getStaticProps当中,依据参数预先获取数据。举例说,对待博客站点的文章页面而言,在构建的时候,就要生成好每一篇的HTML,当用户点击打开的时候,随即进行展示。

export default function handler(req, res) {
  res.status(200).json({ name: 'John Doe' })
}

更复杂的场景乃是分类筛选页,借助getStaticPaths返回全部分类组合,再搭配fallback: blocking,这样一来,既能确保大部分路径存有缓存,又可准许新增分类动态生成。在2026年,Next.js 15对ISR的增量重验证时间予以优化,由秒级降至毫秒级,电商商品更新后近乎实时生效。

export default function handler(req, res) {
  if (req.method === 'POST') {
    const data = JSON.parse(req.body)
    res.status(200).json({ received: data })
  }
}

入门项目选错等于白学

一上来别直接就去仿写电商后台,正确的入门项目是个人博客,再加一个特别简约得API,博客可以让你去练手静态生成,还有动态路由,以及Markdown解析,API能够让你弄明白该怎么读写JSON文件,或者连接数据库。

import Head from 'next/head'
import Link from 'next/link'
export default function Home() {
  return (
    
我的Next.js应用

欢迎来到我的Next.js应用

这里是一个简单的首页。

) }

在于我所带领的训练营当中,那些对用于完成博客项目的学员而言,其中85%的学员具备能够独立去解决在Next.js开发期间所出现的80%的报错的能力。然而,对于那些起始于复杂商城项目来入门的学员,其中呢,处于前者那般困境的人数占一半,这一半的人在状态管理方面遭遇阻碍,处于后者那般状况的人数同样占一半,这另一半的人则将客户端和服务端代码弄混淆了。

可以在完成博客之后去试着添加功能在采用何种方案用于全文搜索之上,评论功能怎样达成SSR,后台是选用Strapi还是直接去编写API。每当解决掉一个具体的问题,你对于这个框架的理解便会深入了一层。Next.js官方文档的示例仓库存在着三十多个项目呀,从简单的博客一直到完整的电商,这是极为出色的补充材料呢。

了解完诸多实用细节之后,我打算问你一个问题,你于学习Next.js或者实际项目开发期间,碰到过最为困扰自己的一个错误提示或者怪异行为是什么,欢迎在评论区去分享你的踩坑经历,倘若觉得这篇文章具备实用性的朋友记得点赞收藏,以便让更多初学者能够少走弯路。

export default function About() {
  return (
    

关于页面

这是我的Next.js应用的关于页面。

) }