Next.js与React的区别

110 阅读3分钟

1.渲染模式

React SPA(单页面应用)

客户端渲染(Client-Side Rendering,CSR) :在传统的 React SPA 中,所有的 HTML 都是在客户端生成的。用户访问页面时,浏览器下载 JavaScript 文件并通过 React 渲染整个应用的界面。这意味着首次加载时,用户会看到一个空白页面,直到 JavaScript 完全加载并执行。

Next.js

  • 服务器端渲染(Server-Side Rendering, SSR) :Next.js 默认支持服务器端渲染。即在用户请求页面时,服务器先生成 HTML 并返回给客户端,用户可以立即看到完整的页面。之后,JavaScript 代码会在客户端执行并接管页面的交互逻辑。这种方式提高了 SEO 和首屏加载速度。

  • 静态站点生成(Static Site Generation, SSG) :Next.js 允许在构建时生成静态 HTML 文件,并在用户请求时直接提供。这种方式非常适合内容不频繁更新的页面,且能显著提高性能。

  • 客户端渲染(CSR) :Next.js 也可以完全支持客户端渲染,与传统的 React SPA 类似。

  • 增量静态生成(ISR) :Next.js 还提供一种增量静态生成的机制,可以在一定时间后重新生成页面,以应对内容频繁变化的场景。

2.路由系统

React SPA

  • 在 React SPA 中,路由通常是通过第三方库(如 React Router)来实现的,开发者需要手动配置每一个路由。

Next.js

  • Next.js 提供了文件路由系统,基于 pages/ 目录中的文件结构自动生成路由,无需手动配置。例如,pages/index.js 会生成 / 路由,pages/about.js 会生成 /about 路由。

  • Next.js 还支持动态路由(通过 [param].js 文件语法),这让路由管理更加简单和直观

3.数据获取

React SPA

  • 在 React 中,数据获取通常是在组件的 useEffect 中通过 fetch 或其他数据请求方式来完成。这些请求都是在客户端发起的,数据在页面加载后才会被请求到。

Next.js

  • getStaticProps:在构建时获取数据,适合静态站点生成(SSG)。

  • getServerSideProps:在每次请求时获取数据,适合服务器端渲染(SSR)。

  • getStaticPaths:与 getStaticProps 结合,生成动态静态页面。

4.SEO

React SPA

React SPA主要依赖客户端渲染,网页内容的HTML是在客户端生成的,对SEP不友好,搜索引擎的爬虫不能很好的解析客户端渲染的内容,排名可能较低。

Next.js

Next.js支持服务端渲染(SSR)和静态站点生成(SSG),页面内容可以在服务器构建时生成静态HTML,搜索引擎可以获取内容,提高SEO友好性。

5.全栈开发支持

React SPA

  • React SPA 主要是前端框架,不包含后端逻辑。如果需要处理 API 请求,通常会依赖于外部的后端服务或通过 Express 等后端框架单独构建 API。

Next.js

  • Next.js 提供了内置的API 路由支持,允许在 pages/api/ 目录下创建 API 路由。这意味着你可以在同一个项目中处理前端和后端逻辑,非常适合全栈开发。

6.构建和部署

React SPA

  • React SPA 的构建工具通常是 Create React App (CRA) 或者类似工具。构建后生成静态资源,通过传统的 CDN 或服务器部署到生产环境。

Next.js

Next.js 支持多种构建模式:静态站点生成、服务器端渲染或混合模式。它可以部署到各种平台上,如 Vercel(Next.js 的官方平台)、Netlify、AWS 等。通过增量静态生成(ISR),Next.js 还可以实现动态内容的增量更新,提供更灵活的部署方案。