Next.js 的数据预取和懒加载的最佳实践

Next.js 是一款非常流行的 React 框架,它在保持 React 一贯高效的同时,还具备数据预取和懒加载的特性。本文将介绍 Next.js 中的数据预取和懒加载的最佳实践,并附带详细的示例代码。

什么是数据预取?什么是懒加载?

在普通的 React 应用中,当用户访问一个动态页面时,数据往往是在组件渲染完成后再通过异步请求获取的。这种方式虽然简单,但用户体验、SEO 和性能等方面都存在一些缺陷。

数据预取能够解决这些问题,它是指在页面渲染之前就提前获取数据。一般而言,数据预取也分为两种方式:

  1. 服务器端渲染(Server Side Rendering,SSR):在服务端获取数据后,再将组件渲染成 HTML,最终将渲染好的 HTML 返回给客户端。
  2. 静态生成(Static Generation):在编译时即将所有可能用到的数据提前获取后,生成一个 HTML 静态文件,之后每次访问都可直接提供这个文件。

通常我们会针对每次访问都必定会用到的数据进行预取,而不会把一些需要特定点击后才会触发的数据提前获取。

懒加载则是指当组件可视范围进入浏览器视窗时,才开始加载组件的内容。这种方式能够提高网站的性能和速度,避免一开始就把所有的资源都加载,导致最终页面渲染特别慢。

Next.js 中的数据预取和懒加载

Next.js 中支持的两种数据预取方式,也就是数据获取方法,分别是 getStaticProps 和 getServerSideProps。前者是属于静态生成,后者则是属于服务器渲染,获取数据后通过 Props 传递到组件当中进行渲染。

getStaticProps

在使用 getStaticProps 时,我们需要在页面组件文件名的基础上添加一个与之对应的 .js 文件,如下所示:

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

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

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

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

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

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

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

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

上例中,我们首先导入 useRouter 和在函数内创建一个 Post 组件。然后判断当前路由是否处于回退模式中,如果是,则返回一个 Loading 文案。

getStaticPaths 和 getStaticProps 两个方法,构成了 Next.js 利用静态生成方式来预取数据的核心逻辑。其中,getStaticPaths 方法用于指定构建时需要生成哪些路由,而 getStaticProps 则是真正去请求数据的方法。

在 getStaticPaths 中,我们可以传入一些参数进行获取,同时还需要通过 fallback 字段告诉 Next.js 是否支持 SSR 模式下的 fallback。fallback 取值有三种,分别是:

  1. true: 当请求不存在的路由时,Next.js 可以在服务端渲染这个请求,然后再通过静态页面的方式存储一份到磁盘上。
  2. false: 当请求不存在的路由时,Next.js 可以直接返回 404。
  3. 'blocking': 当请求不存在的路由时,Next.js 可以在服务器渲染期间暂停页面渲染直到数据获取完成。

在 getStaticProps 中,我们可以像上例中一样,使用 fetch 或 axios 等工具来通过网络请求获取数据,并将获取到的数据通过 props 传入 Post 组件进行渲染。

getServerSideProps

相对于 getStaticProps,getServerSideProps 则是在服务器端对数据进行预取,并将数据通过 Props 传递进行渲染的一种方式。使用方法与 getStaticProps 区别不大,在此不再赘述。

Next.js 中的懒加载

我们可以通过使用 React.lazy 和 Suspense 两个内置功能来实现 Next.js 的懒加载。 示例代码如下:

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

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

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

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

在上例中,首先我们先引入了 React.lazy 和 Suspense。然后,我们在组件 MyComponent 中通过 lazy 的方式引入了一个组件 component.js。最后,在 Suspense 标签中将引入的组件用于渲染,并在 fallback 中指定加载时的提示。

总结

通过以上的示例代码,我们可以看到 Next.js 中数据预取和懒加载的实现方式,以及如何将其与 React.lazy 和 Suspense 等 React 内置功能结合实现懒加载。 Next.js 的这些优质功能让前端工程师在实现高效动态页面时更加高效,提高了开发体验和用户体验,非常值得开发者进行尝试。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/64a6220d48841e98942ac0dd


猜你喜欢

  • 如何在 Vue SPA 应用中使用 Vue-lazyload 实现图片懒加载?

    如何在 Vue SPA 应用中使用 Vue-lazyload 实现图片懒加载? 懒加载是指在页面滚动时才加载图片或网页内容,可以显著减少页面加载时间,提升用户体验,特别是对于图片较多的网站或应用,懒加...

    1 年前
  • Cypress 运行测试用例时出现 “cy.saveLocalStorage is not a function” 的错误解决方法

    最近在使用 Cypress 进行自动化测试时,遇到了一个奇怪的错误:在执行测试用例时,控制台突然抛出了 “cy.saveLocalStorage is not a function” 的错误提示。

    1 年前
  • 深入理解 WCAG2.0 无障碍指南及其应用技术

    背景及介绍 WCAG2.0(网页内容无障碍指南)是 Web 2.0 时代最广泛使用的无障碍标准之一,该标准的准则和技术可供网站和 Web 应用程序设计者、开发者和测试人员使用并实现,以确保他们所开发的...

    1 年前
  • 使用 Material Design Lite 实现响应式设计的优化技巧

    简介 Material Design Lite(MDL)是一个基于谷歌 Material Design 风格的用户界面框架,它提供了丰富的 UI 组件和样式,使得开发者可以快速开发出实现谷歌 Mate...

    1 年前
  • 如何利用 Chai 进行 URL 地址还有参数的比较判断

    在前端开发中,我们常常需要进行 URL 地址还有参数的比较判断。比如前端单元测试时,需要对网页跳转进行验证,或者在某些交互场景中需要判断某个链接是否符合预期。这时,利用 Chai 帮助我们进行比较判断...

    1 年前
  • 在 Express.js 中使用 Cluster 进行多进程管理的方法

    在 Node.js 中,使用多进程可以有效地提高服务器的性能和可靠性。在 Express.js 中,可以使用 Node.js 的 Cluster 模块来进行多进程管理。

    1 年前
  • Serverless 或在今年引爆 PaaS 市场,先睹为快?

    Serverless,即无服务器架构,是一种新型的云计算模型,它将应用程序的构建和运行交给云服务提供商。相比传统的服务器架构,Serverless 无需配置、维护服务器,开发者只需编写应用程序代码,上...

    1 年前
  • Next.js 服务端渲染优化实践

    什么是 Next.js? Next.js 是一个基于 React 的轻量级框架,它集成了服务端渲染、静态导出、样式及数据处理等多个功能。Next.js 的服务端渲染可以让页面更快地加载,且符合 SEO...

    1 年前
  • Sequelize 中 bulkCreate 方法的详解

    在使用 Sequelize 进行数据操作时,如果需要插入多条数据,可以使用 bulkCreate 方法。本文将深入介绍 Sequelize 中 bulkCreate 方法的用法及其指导意义。

    1 年前
  • 遇到 PM2 启动 NodeJS 应用失败的解决方案

    在进行 Node.js 开发和部署过程中,我们会经常使用 Node.js 进程管理工具 PM2 来启动 Node.js 应用。然而,在使用 PM2 启动应用时,可能会遇到直接运行 npm start ...

    1 年前
  • 解决 ES12 中的模块化循环依赖问题

    在前端开发中,模块化是一个非常重要的概念,ES6 中提供了模块化的支持,但是在模块化的使用中,循环依赖问题也是一个常见的困扰开发者的难题。特别是在 ES12 中,循环依赖问题更加普遍和复杂,因此掌握解...

    1 年前
  • Angular4.0 快速上手教程

    Angular 是一个流行的前端开发框架,它能帮助开发者快速构建复杂的单页面应用(SPA)。 Angular 提供了许多内建的功能,如模块化、组件化、依赖注入等,让前端开发变得更加高效、优化和模块化。

    1 年前
  • 在 Hapi 框架中使用 Redis 做缓存

    在现代 Web 开发中,缓存是提高应用性能和可扩展性的重要手段之一。Hapi 框架是一种快速、可扩展、且提供大量插件开箱即用的 Node.js 框架,而 Redis 则是一种高性能的内存数据库,常被用...

    1 年前
  • ES9 正则表达式新特性 Lookbehind 前瞻零宽断言、后顾零宽断言的使用技巧及注意事项

    在 ES9 中,正则表达式新增了一些功能,其中就包括 Lookbehind(前瞻零宽断言)和后顾零宽断言。 Lookbehind 可以理解为在匹配正则表达式时,后面的字符符合某个条件时才会匹配前面的字...

    1 年前
  • ESLint 和 Mocha 的集成使用方法

    在前端开发过程中,代码的质量和可靠性非常重要。为了保证代码的品质,我们需要使用一些工具来辅助我们进行代码检查和测试。ESLint 和 Mocha 是两个非常有用的工具,他们能够帮助我们保证代码风格的一...

    1 年前
  • 使用 Mocha 和 Chai 如何测试 Redis 存储库?

    在前端开发过程中,我们经常需要操作 Redis 数据库。其中,测试 Redis 存储库的正确性是非常重要的一步。本文将介绍如何使用 Mocha 和 Chai 进行 Redis 存储库的测试。

    1 年前
  • MongoDB 的非关系数据库特点与应用

    什么是 MongoDB? MongoDB 是一个非关系型数据库,属于 NoSQL 数据库的一种。在 MongoDB 中,数据不存储在表格中,而是以 JSON 格式存储在一个文档中。

    1 年前
  • LESS 中如何使用 CSS 网格布局(Grid)实现页面布局

    引言 在前端开发中,页面布局是我们经常遇到的问题之一。在过去,我们可能会用 Flexbox 或者 Float 等方式来进行页面布局。而随着 CSS 网格布局(Grid)的出现,我们可以更加便捷的实现复...

    1 年前
  • 使用 Prisma 和 Nexus.js 快速构建 GraphQL API

    GraphQL 是一种新兴的 API 架构,它解决了 REST API 存在的一些问题,并且在最近几年受到了越来越多的关注和使用。然而,构建一个高效、可维护的 GraphQL API 并不是一件容易的...

    1 年前
  • Vue.js 中使用 provide/inject 实现跨组件间数据共享详解

    在 Vue.js 开发中,通常会涉及到多个组件之间需要共享同一个数据的情况,这时就需要使用 provide 和 inject 来实现跨组件间的数据共享。 提供者 provide 和注入者 inject...

    1 年前

相关推荐

    暂无文章