初步了解Next.js

Next.js是React的一个超集框架,为什么会有Next.js这个框架存在呢,因为它可以解决React的痛点,就是客户端渲染

Next.js的一大亮点就是支持多模式混合渲染,分别有四种模式,CSR,SSR,SSG,ISR,然后我开介绍一下这四种模式是什么以及他们分别是如何渲染的。

Next.js的四种模式:

  1. CSR(默认渲染模式):这种渲染模式就是React的渲染模式,客户端渲染。这种渲染模式的一大特点就是Js渲染,过程是这样的,浏览器加载空的HTML,加载JS,JS执行并且加载页面,但是这种加载模式有一个很大的弊端,就是SEO(搜索引擎优化)差,并且首屏加载慢
js 复制代码
// app/csr/page.tsx
'use client'; // 关键:声明这是客户端组件

import { useState, useEffect } from 'react';

export default function CSRPage() {
  const [data, setData] = useState(null);
  const [isLoading, setLoading] = useState(true);

  useEffect(() => {
    // 浏览器端发起请求,就像传统的 React 一样
    fetch('https://api.example.com/data')
      .then((res) => res.json())
      .then((data) => {
        setData(data);
        setLoading(false);
      });
  }, []);

  if (isLoading) return <p>Loading...</p>;
  if (!data) return <p>No data</p>;

  return (
    <div>
      <h1>CSR Page</h1>
      <p>Data: {data.content}</p>
      <p>浏览器下载完 JS 后才开始请求数据</p>
    </div>
  );
}
  1. SSR:这种加载模式是服务器端来进行加载的,过程:用户请求页面 -> 服务器执行React代码生成HTML -> 返还给浏览器。优点:SEO好,首屏加载快,并且数据是实时的。缺点就是服务器压力大。
js 复制代码
async function getData() {
  // 这告诉 Next.js: "绝对不要缓存,每次有人访问页面,你都要重新去 API 拉数据"
  const res = await fetch('https://api.example.com/data', { 
    cache: 'no-store' 
  });
  
  return res.json();
}
  1. SSG:静态站点生成,在项目构建打包是就生成HTML,用户访问时直接给HTML文件。优点:加载速度最快,服务器压力小。数据非实时,适合博客和文档。
js 复制代码
async function getData() {
  // 这告诉 Next.js: "打包的时候请求一次,然后把结果存死在 HTML 里"
  const res = await fetch('https://api.example.com/data', { 
    cache: 'force-cache' 
  });
  
  if (!res.ok) throw new Error('Failed to fetch data');
  return res.json();
}
  1. ISR:SSG的升级版,可以设定时间,过期后用户访问时后台会自动重新构建该页面。兼备了SSR的动态和SSG的速度。
js 复制代码
async function getData() {
  // 这告诉 Next.js: "先缓存起来,但如果这数据超过 60秒 没更新了,下次有人来访问时,后台偷偷去更新一下"
  const res = await fetch('https://api.example.com/data', { 
    next: { revalidate: 60 } 
  });
  
  return res.json();
}

Next.js的路由系统:

Next.js使用的文件系统路由,不需要想React-router一样配置路由表

  1. Pages Router(旧的路由):文件放在pages/ 目录下,通过操控文件名,可以生成动态路由和静态路由。在数据获取方面,需要使用getStaticProps来实现SSG静态站点渲染,使用getServerSideProps实现SSR服务器端渲染。
  2. App Router(Next.js新特性):文件放在app/ 目录中,比pages路由方式不一样的是可以通过layout文件来定义全局和局部的布局,然后就是自带了一层渲染方式,RSC渲染方式,过程:HTML发给浏览器,JS代码不会发给浏览器,浏览器只负责渲染,不负责逻辑

组件:

Next.js自带了一些组件

  • <Image />: 自动根据视口大小调整图片尺寸、格式、懒加载。防止布局偏移。

  • <Link />: 类似于 <a> 标签,但当链接出现在视口中时,Next.js 会自动预加载目标页面的代码,让跳转极其流畅。

  • <Script />: 优化第三方脚本的加载时机。

相关推荐
用户904706683574 分钟前
Nuxt css 如何写?
前端
夏天想5 分钟前
element-plus的输入数字组件el-input-number 显示了 加减按钮(+ -) 和 小三角箭头(上下箭头),怎么去掉+,-或者箭头
前端·javascript·vue.js
0思必得07 分钟前
[Web自动化] Selenium基础介绍
前端·python·selenium·自动化·web自动化
Filotimo_9 分钟前
前端.d.ts文件作用
前端
进击的野人9 分钟前
Vue 3 响应式数据解构:toRef 与 toRefs 的深度解析
前端·vue.js·前端框架
ohyeah10 分钟前
CSS 作用域隔离实战:React、Vue 与 Styled Components 的三种范式
前端
沛沛老爹13 分钟前
Web开发者进阶AI:Agent Skills-深度迭代处理架构——从递归函数到智能决策引擎
java·开发语言·人工智能·科技·架构·企业开发·发展趋势
Good_Starry21 分钟前
Java——正则表达式
java·开发语言·正则表达式
二哈喇子!26 分钟前
前端HTML、CSS、JS、VUE 汇总
开发语言·前端
小白路过26 分钟前
node-sass和sass兼容性使用
前端·rust·sass