Next.js 如何预渲染动态页面?

阅读时长 6 分钟读完

引言

Next.js 是一个 SSR(服务器端渲染)框架,它允许我们使用 React 来开发服务端渲染的应用程序。其中,一种非常有用的功能就是 Next.js 支持预渲染(也叫静态渲染)动态页面,这大大提高了应用程序的性能,同时也更有利于 SEO 优化。本篇文章将介绍 Next.js 如何预渲染动态页面,以及具体的实现方法和代码示例。

什么是预渲染?

在普通的动态 SPA(单页面应用)中,我们通常会使用 CSR(客户端渲染)的方式,将页面的渲染交给前端 JavaScript 运行时完成。这意味着用户必须等待所有的 JavaScript 代码加载完成后才能看到最终的页面效果,这样会导致页面加载速度较慢。而预渲染则是一种将动态生成的页面提前渲染成静态 HTML 文件并缓存的方式,使得页面可以在服务器上完成渲染,从而实现更快的加载速度。

可以将预渲染看成是一种折中方案,既可以享受 SPA 带来的舒适体验,同时又保留了传统 SS (服务器端渲染)的优点。在某些场景中,例如 SEO 优化,CRA 更好的性能优化等,预渲染无疑是一种更好的选择。

Next.js 中的预渲染

使用 Next.js,我们可以很容易地将页面转换为预渲染的静态 HTML 文件。除了默认支持静态生成之外,Next.js 也为我们提供了更独立的 API,例如 getStaticProps 和 getStaticPaths,它们可以让我们在开发过程中更加灵活地创建预渲染的页面。

getStaticProps

getStaticProps 是 Next.js 中用来生成静态页面的 API。它返回一个对象,包含在页面渲染过程中所需要的所有数据,并将其传递给页面组件。Next.js 使用这些数据来渲染与页面对应的静态 HTML 文件。

例如,我们有一个页面 /posts/[id].js,它接收一个动态的 id。我们可以通过 getStaticProps 函数来生成该页面的静态版本:

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

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

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

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

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

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

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

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

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

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

在代码中,我们使用了 getStaticPaths 来预先构建所有页面的路径,此时返回的 fallback 需要设置为 true,以便在我们找不到静态页面时生成动态页面。如果 fallback 设置为 true,页面将在首次访问时自动生成,同时页面会缓存,以便下次快速响应。

针对该页面的具体动态数据的获取通过 getStaticProps 实现,我们可以使用 fetch、axios 或其他异步请求工具进行数据获取,获取结果作为 props 对象的一部分返回。

getStaticPaths

getStaticPaths 是 Next.js 中用于定义动态路由的函数,它的返回结果将被 getStaticProps 所使用。getStaticPaths 返回一个对象,告诉 Next.js 应该为哪些路径生成静态页面,这些路径可以是固定的,也可以是动态生成的。

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

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

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

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

以上代码展示了如何使用 getStaticPaths 与 getStaticProps 同时实现生成静态动态路由的方法。其中,getStaticPaths 返回的 paths 数组中包含了为哪些路由生成静态页面的信息,该数组中的每一项都是一个对象,其 params 属性为该路由中动态值的名称。

返回的 paths 数组需要使用 fallback 参数进行配置,如果 fallback 为 true,将表示未列出的路由请求将动态生成,并在下一次请求时缓存。

总结

以上就是 Next.js 中预渲染动态页面的实现方式。通过使用 getStaticProps 和 getStaticPaths 可以实现灵活的路由参数配置,从而让 Next.js 更适合用于构建长时间运行的 Web 应用程序。如果你正在寻求一种灵活的、高性能的 Web 应用程序解决方案,Next.js 一定是你的选择之一。

参考资料

Next.js 官方文档(中文版)

预渲染和静态网站生成有什么区别? - 面向人群的 Next.js

Next.js 预渲染(静态渲染)原理解析

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

纠错
反馈