初步了解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 />: 优化第三方脚本的加载时机。

相关推荐
好家伙VCC20 小时前
# 发散创新:用 Rust构建高并发虚拟世界引擎核心模块在当今游戏开发与元宇宙构建中,**虚拟世界的性能瓶颈往往不是图形渲染,而是底
java·开发语言·python·rust·图形渲染
Liu6288821 小时前
C++中的状态模式
开发语言·c++·算法
smchaopiao21 小时前
使用C语言打印几何图形:从三角形到菱形
c语言·开发语言·算法
JohnsonXin21 小时前
一次线上白屏排查:静态 import 是如何悄悄破坏 Webpack 共享 Chunk 的
前端·webpack·node.js
爱滑雪的码农21 小时前
Java基础六:条件语句与switch case
java·开发语言
我喜欢就喜欢21 小时前
Word 模板匹配与样式同步技术详解
开发语言·c++·qt·word·模板匹配
Mr -老鬼21 小时前
前后端联调避坑!Vue优先IPv6导致接口不通,Rust Salvo这样解决
前端·vue.js·rust
jzlhll12321 小时前
Kotlin Mutex vs Java ReentrantLock vs synchronized
java·开发语言·kotlin
予你@。21 小时前
# Vue2 + Element UI 表格合并实战:第二列按「第一列 + 第二列」条件合并
前端·javascript·vue.js