认识NextJs
参考学习:深海鱼在掘金 Next.js从入门到实战保姆级教程
NextJs轮廓
一句话描述:NextJs是一个基于React的框架,用于构建SSR(服务器端渲染)的Web应用。学习NextJs的前置要求:了解Html、css、JavaScript、TypeScript和React,至少得能看懂Next官方文档中的示例代码。
React和NextJs有什么区别?
需要粗略地了解下Web应用渲染模式的演进历程:
早先的时候,普遍都是服务端渲染(SSR)模式:HTML全部组装完成后,服务器将它发送给浏览器。
去饭店吃饭 ——> 顾客点菜 ——> 服务员拿给后厨 ——> 厨师炒菜 ——> 服务员上菜 | | | | 页面加载: 空的HTML 下载JavaScript 执行JS 发给浏览器- 优点:首屏加载快(没啥内容,也不等JS执行,也不需要请求响应),SEO友好(爬虫拿到的就是服务器阶段完整内容的HTML,啥都有还不用执行JS和等接口响应)
- 缺点:切页面就卡,反应慢,耗时久(重新请求,再来一套点菜到上菜),
后来,出现了Vue、React等框架,单页面应用(SPA)成为主流的客户端渲染(CSR)模式:浏览器只接收Html结构,JavaScript负责动态渲染内容。
吃快餐 ——>热销套餐 + 个性套餐(儿童餐) ——> 服务员组装(汉堡+炸鸡) ——> 散件(薯条)现炸 ——> 可乐自取 | | | | | 直接出餐 现点现做 预制现有的 增量现做 顾客自取组餐成功 (SSG) (SSR) ( ISR ) (RSC)- 优点:页面切换流畅,响应快
- 缺点:SEO不友好,首屏加载耗时(JS执行+接口请求)
NextJs的玩法:选择性切换渲染模式,NextJS的渲染模式全家桶:
- SSG(静态生成):构建时候生成,最快
- SSR(服务端渲染):响应实时请求
- ISR(增量静态再生):静态+动态结合
- RSC(React服务端组件):默认组件,零JS水合(JS和HTML结构无冲突组合)
- PPR(部分与渲染):流式渲染
- CSR(客户端渲染):传统SPA,补充手段
NextJs关键词
提到NextJs首先会想到的关键词就是框架本身的特色属性,了解关键词能进一步了解框架。
关键词1—核心渲染模式
- 服务端渲染(SSR,Server-Side Rendering):每次请求,服务器实时执行代码并生成HTML发送给客户端,客户端接收HTML后下载JavaScript进行水合(Hydration),完成页面交互。常用于内容频繁变化的场景,如个人主页,实时数据展示等。
- 静态生成(SSG,Static Site Generation):构建阶段预先生成所有页面的HTML,部署到CDN等服务器。适用于内容相对文档的场景,如博客文章、产品介绍。
- 增量静态再生(ISR,Incremental Static Regeneration):SSG的增强版本,页面以静态形式存在,内容在后台异步生成,无需重新部署。适用于低频度更新内容的场景。
- 客户端渲染(CSR,Client-Side Rendering):页面HTML骨架为空,浏览器下载JS包后在浏览器端渲染页面。适用于局部交互模块场景,如购物车弹窗,登录悬浮。
关键词2—路由体系
NextJs中有两套路由体系:Pages Router 和 App Router,从社区更新趋势来看,往后的发展更倾向于使用App Router。
- Pages Router:基于传统React客户端渲染思维封装SSR/SSG
- App Router :重构后,原生绑定RSC服务端组件,配合客户端组件双管齐下
关键词3—数据获取
Pages Router 的三套固定API:
// SSG 静态生成,构建时候一次性拉取数据,生成静态HTML
export async function getStaticProps(){}
// 动态路由SSG,预定义参数列表
export async function getStaticPaths(){}
// SSR 每次访问都在服务端请求最新数据
export async function getServerSideProps(){}
// 组件内,使用useEffect = CSR
App Router 统一基于浏览器标准做数据请求:
自动去重:同一个请求在同一个渲染周期多次调用,只发一次实际网络请求
三级缓存策略:默认静态数据永久缓存
RSC内直接aysnc/await执行异步解构数据,无需useEffect、SWR
服务端发起请求,请求Cookie、Token在服务端统一携带,不会暴露前端。(双Token安全机制)
SWR:React hooks数据请求库,来源Stale-While-Revalidate,主要处理数据获取、缓存管理、状态同步。
NextJs专属特性
NextJs在App Router 的基础上基于React Server Component(RSC) 拆分出两类组件,再配套 Server Action解决了「服务端执行逻辑、客户端触发调用」的前后端交互问题。
- 服务端组件(Server Component):默认组件,运行在 Node/Edge 服务端,不进浏览器 JS 包;
- 客户端组件(Client Component):加
"use client",运行在浏览器,能使用 hooks、DOM API、交互事件; - Server Actions(服务端 Action):可理解为内嵌在组件代码里的后端接口函数,客户端按钮直接调用,不用单独写
route.js。
NextJs强势点
概括总结就是零配置的工程化能力。主要为:
- 零配置支持Typescript,ESModule
- 内置路由、内置API接口(API Router/Router Handlers)
- 图片优化(next/image)
- 字体优化(next/font)
- 脚本优化(next/script)
- 图片懒加载、自动压缩、格式自适应
- 内置CSS支持:CSS Modules、Tailwindcss
NextJs生态和未来
了解下NextJs与其他技术的关系,便于选型决策。
- NextJs与React:React是基础库作为基座提供基础能力(组件化UI开发),NextJs是框架作为服务层提供解决方案。
- NextJs与Nuxt:熟悉Vue使用Nuxt,熟悉React使用NextJs。
- NextJs与传统后端框架:NextJs定位是全栈Web框架,对于复杂业务逻辑、微服务架构场景,还是需要专业的后端框架处理(如Express、NestJs等)。
关于AI发展的当下:NextJs的流式输出支持+双Token的服务端安全调用,配合混合渲染策略让NextJs与AI高度匹配,妥妥的未来可期。