使用 Next.js 开发的 SPA 因 404 卡顿问题解决

阅读时长 5 分钟读完

在使用 Next.js 开发单页面应用(SPA)时,经常会遇到404页面载入卡顿的问题。这个问题的根源在于,当用户访问一个不存在的路径时,路由会重定向到404页面,但Next.js是使用服务器端渲染(SSR)技术的框架,对于获取不到数据的页面,需要等待服务器渲染返回完整的HTML再显示在客户端,因此页面会有短暂的卡顿。

解决方案

为了解决这个问题,我们可以使用 Next.js 提供的 getStaticPaths 函数来预渲染所有可能存在的页面,以便在访问时直接调取缓存页面,从而避免了等待服务器响应的时间,解决了404页面切换时卡顿的问题。

详细步骤

1. 新建posts目录并创建[id].js文件

在项目根目录下新建posts目录,并创建[id].js文件。该文件的作用是渲染单篇文章的页面。

-- -------------------- ---- -------
------ ----- ---- --------
------ - --------- - ---- --------------
------ ------ ---- -----------------------

------ ------- -------- ------ ------ ------- -- -
  ----- ------ - ------------
  -- ------------------- -
    ------ ----------------------
  -

  ------ -
    --------
      ----------------
      ----------------
    ---------
  --
-

2. 在[id].js文件中使用getStaticPaths函数实现预渲染

使用getStaticPaths函数来实现单篇文章页面的预渲染。该函数会在构建时静态生成所有可能的文章页面,并返回一个包含路径和参数的对象数组。

-- -------------------- ---- -------
------ ----- -------- ---------------- -
  ----- --- - ----- ---------------------------------------
  ----- ----- - ----- -----------
  ----- ----- - ---------------- -- --
    ------- - --- ------------------ --
  ----

  ------ - ------ --------- ---------- --
-

代码中,我们通过调用远程API来获取所有文章信息,并将其映射到路径和参数的数组中。我们还将fallback设置为blocking,以确保在首次访问时渲染404页面时能够自动缓存文章页面,避免了在加载文章页面时卡顿的问题。

3. 在[id].js文件中使用getStaticProps函数来获取文章数据

为了获取单篇文章的数据,我们需要在[id].js文件中使用getStaticProps函数来将文章数据传递给Post组件。

-- -------------------- ---- -------
------ ----- -------- ---------------- ------ -- -
  ----- --- - ----- ----------------------------------------------------
  ----- ---- - ----- -----------

  ------ -
    ------ -
      ------ -----------
      -------- -------------
    --
  --
-

代码中,我们通过getStaticProps函数来获取文章数据,并将其作为props属性传递给Post组件。

示例代码

完整的示例代码如下:

-- -------------------- ---- -------
------ ----- ---- --------
------ - --------- - ---- --------------
------ ------ ---- -----------------------

------ ------- -------- ------ ------ ------- -- -
  ----- ------ - ------------
  -- ------------------- -
    ------ ----------------------
  -

  ------ -
    --------
      ----------------
      ----------------
    ---------
  --
-

------ ----- -------- ---------------- -
  ----- --- - ----- ---------------------------------------
  ----- ----- - ----- -----------
  ----- ----- - ---------------- -- --
    ------- - --- ------------------ --
  ----

  ------ - ------ --------- ---------- --
-

------ ----- -------- ---------------- ------ -- -
  ----- --- - ----- ----------------------------------------------------
  ----- ---- - ----- -----------

  ------ -
    ------ -
      ------ -----------
      -------- -------------
    --
  --
-

结论

使用 Next.js 开发单页面应用时,页面切换时的卡顿问题是一项非常棘手的问题。本文介绍了如何使用 Next.js 提供的 getStaticPaths 函数来优化预渲染所有可能存在的页面以缓存,从而避免了等待服务器响应的时间,解决了404页面切换时卡顿的问题。这种解决方案既简单又实用,是一种非常值得开发者掌握的技巧。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6712c217ad1e889fe2081368

纠错
反馈