Next.js 服务器端渲染数据预取处理

在现代 web 应用程序开发中,服务器端渲染 (Server-side rendering, SSR) 对于优化应用程序的加载速度和利于搜索引擎优化 (Search Engine Optimization, SEO) 非常重要。使用 SSR,我们可以在浏览器中看到更快、更普遍且更有利的渲染,从而提供用户更好的体验。Next.js 既提供了轻量化的 SSR 框架,同时还提供了一些出色的数据预取处理方法,让 SSR 操作更加顺畅和有效。

数据预取处理

对于应用中许多页面和组件,通常需要从服务器端获取数据。但是,传统的服务器渲染方式的缺点是它只支持部分渲染过程,因此服务器端不能像在客户端中一样自由地进行数据请求。因此,Next.js 的数据预取处理非常有用,它意味着我们可以在渲染之前提前提取数据,并将其注入到组件中。

在使用 Next.js 进行 SSR 并进行数据预取处理时,我们需要写一个特殊的函数 getInitialProps。这个函数是 Next.js 的静态,所以它能够在服务器上运行,并将组件预先填充数据。如下所示:

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

在上面的例子中,我们使用了 fetch 进行一个简单的网络请求,并等待结果,然后将这个结果加入到返回值 data 中。在接下来的渲染阶段中,这个函数的返回值将会成为组件的 props 属性。

基本示例

接下来,我们将通过一个缩略图墙示例来展示如何使用 Next.js 的数据预取处理。

1. 创建新项目并安装依赖

使用以下命令创建一个 Next.js 项目:

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

在项目中安装 axios 和 react-infinite-scroll-component 依赖:

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

2. 创建数据请求

在项目中创建一个叫做 getData() 的函数,使用 axios 从一个远程 api 中获取数据:

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

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

3. 编写一个带有分页和无限滚动的组件

编写一个包含分页和无限滚动的组件,并使用 getInitialProps 函数来预取数据,程序将在渲染时显示数据。

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

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

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

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

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

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

在上面的代码中,我们使用了 React 的内置组件以及一个名为 react-infinite-scroll-component 的轻量级 npm 包,其中 getNext 和 hasMore 是控制无限滚动的方法。

4. 运行程序

最后,运行下面的命令启动应用程序。

--- --- ---

这将在默认端口下启动程序。现在,打开浏览器并访问 http://localhost:3000,您将看到一个自动生成如下缩略图的无限滚动墙:

真实场景示例

在对真实场景下的数据预取处理进行进一步探究之前,您可以先学习在 Next.js 中使用客户端数据渲染来实现具有捆绑功能的模态框的教程。

我们尝试将 getInitialProps 进行升级,使其更好地适用于实际数据处理任务。在这个示例中,我们将使用 Hacker News 的公共 API 获取数据并将其注入到 Next.js 应用程序的组件中。

1. 创建新项目并安装依赖

同样使用以下命令创建一个新的 Next.js 项目:

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

在项目中安装 isomorphic-unfetch 依赖:

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

2. 创建数据请求

在项目中创建一个叫做 getStories() 的函数,使用 isomorphic-unfetch 从 Hacker News 的公共 API 中获取数据:

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

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

在这个例子中,我们通过使用 isomorphic-unfetch,简单地向 https://api.hackerwebapp.com/top(可以通过`storyType`参数来变化)路径发起了 API 请求,然后将响应内容解析为 JSON 对象并返回。

3. 编写一个新闻列表组件

我们将为 Hacker News 常规 Top Stories 及其代理数据源服务的一个新闻列表组件进行操作:

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

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

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

这是一个简单的渲染组件,它根据预先获取的数据生成了一个新闻列表。注意 getInitialProps 函数中使用的 query 参数,这是 Next.js 内置的获取 Query String 信息的方法。

4. 运行应用程序

最后,运行下面的命令来启动应用程序。

--- --- ---

打开浏览器并访问 http://localhost:3000?type=top,您将看到一个包含 Hacker News Top Stories 的列表。

总结

数据预取处理,是 Next.js 中的一个强大而实用的 SSR 功能。对于扩大 SSR 的使用范围、提高性能和搜索引擎优化等方面,它都具有重要的指导作用。在本文中,我们介绍了 Next.js 的数据预取机制,并以两个基本示例为参考,展示了其功能和应用场景。无论是在实际项目中,还是业余学习中,我们都建议开发人员在实践中学习这一技术。\

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


猜你喜欢

  • Vue.js 项目中怎么做权限管理?

    在现代 web 应用程序开发领域中,权限管理是一项至关重要的任务。使用 Vue.js,我们可以轻松地实现权限管理。本文将介绍一些在 Vue.js 中实现权限管理的最佳实践。

    1 年前
  • SPA 中滚动高度的获取方法及应用

    单页应用程序(SPA)是一种流行的 Web 应用程序架构,它使用 Ajax 和 DOM 操作使用户界面变得更加动态和响应。在 SPA 中,用户不需要刷新页面来加载新的数据或内容,这为开发人员带来了更多...

    1 年前
  • Webpack 不同环境下的配置实现

    前言 Webpack 是一个模块打包工具,被广泛应用于前端项目中。Webpack 可以将多个模块打包成一个文件,从而减少了 HTTP 请求次数,加速了页面的加载速度。

    1 年前
  • 在 PWA 应用中使用 Fetch API 处理网络请求

    PWA(Progressive Web Apps)是一个新兴的 Web 应用开发方式,它可以带来类似于原生应用的体验和性能。和传统的 Web 应用不同,PWA 应用可以在离线环境下使用,这意味着应用需...

    1 年前
  • Node.js 中的 RESTful API 是怎么做的?

    作为一名前端开发人员,你一定已经知道了 RESTful API 的重要性。而在 Node.js 中,你可以很方便地实现自己的 RESTful API,本文将详细介绍 Node.js 中 RESTful...

    1 年前
  • SASS 中禁止使用嵌套选择器带来的问题及解决方法

    在 SASS 中,嵌套选择器是一种非常方便的语法,可以使得我们在编写样式时更加简便和灵活。然而,在实际使用中,过度嵌套选择器会带来一些问题,比如样式冲突、层级过多、样式耦合等,这些问题会影响开发效率、...

    1 年前
  • 使用 Chai.js 和 Mocha.js 进行 BDD 测试

    随着前端应用程序的不断发展,测试变得越来越重要。 BDD(行为驱动开发)是一个流行的测试风格,它帮助开发人员设计优秀的应用程序。使用 Chai.js 和 Mocha.js 完成 BDD 测试,将能够快...

    1 年前
  • Node.js SSE 推送无效:代码错误排查

    前言 Server-Sent Events (SSE) 是一种与 WebSocket 相似的实时通信协议,它是一个基于 HTTP 的协议,使用简单而且支持跨域通信。

    1 年前
  • # 前端性能优化:使用缓存、批处理和延迟加载优化 REST API

    前端性能优化:使用缓存、批处理和延迟加载优化 REST API 随着前端技术的快速发展,REST API 已经成为了现代 Web 应用的重要组成部分。然而,有时候我们可能会遇到 REST API 响应...

    1 年前
  • ECMAScript 2017 中的 async/await 代码优化技巧:使用 Promise.race 方法

    前言 在新的 ECMAScript 2017(ES8)标准中,async/await 成为了新的标配。它使得异步代码的写作像同步代码一样简单并且易懂。但是,当我们使用 async/await 时,需要...

    1 年前
  • ECMAScript 2016(ES7) Promises 的实践总结

    在前端开发中,我们经常需要处理异步操作。 ES6 引入了 Promises 的特性,用于解决异步操作的问题。而 ECMAScript 2016(ES7) 进一步完善了 Promises,增加了一些新的...

    1 年前
  • React Router 常见问题及解决方案

    React Router 是一个强大的在 React 应用中管理路由的库,它提供了多种不同的路由组件来帮助开发人员轻松构建单页应用。但是在使用 React Router 的过程中,经常会遇到一些常见的...

    1 年前
  • 如何使用 Docker 部署多节点 Kubernetes 集群

    在前端开发中,我们经常需要部署 Web 应用程序。传统部署方式需要手动安装环境,配置服务器和部署应用程序,这样的方式容易出错并且不易维护。现在有一种先进的技术称为容器化技术,可以为我们解决这些问题。

    1 年前
  • RxJS 中的错误处理及相关解决方案

    RxJS 是一个强大的响应式编程库,它在前端开发中经常被用来处理异步操作、事件流等。然而,随着应用程序越来越复杂,错误处理也变得越来越重要。在本文中,我们将讨论 RxJS 中的错误处理及相关解决方案。

    1 年前
  • Mongoose 实现 MongoDB 对数据表字段的限制

    在前端开发中,Mongoose 是一个非常常用的工具。它是一个基于 Node.js 的 MongoDB ORM 库,可以通过它来操作 MongoDB 数据库,同时也可以进行数据表字段的限制操作。

    1 年前
  • Custom Elements 实现输入框组件(Input)

    前言 在实际项目中,很多时候都需要用到一些自定义的组件。此时,我们要么自己手写一遍,要么使用第三方的 UI 库,然而前者会浪费很多时间,而后者的样式定制又会非常麻烦,特别是在多人开发的产品中,更多的时...

    1 年前
  • 如何使用 Hapi.js 和 Passport.js 进行身份验证和授权?

    前端开发中,常常需要进行身份验证和授权,以确保用户在使用应用时的安全和合法性。在这篇文章中,我将介绍如何使用 Hapi.js 和 Passport.js 进行身份验证和授权。

    1 年前
  • 如何使用 Sequelize ORM 实现全文搜索

    在 web 应用开发中,通常需要搜索功能以提高用户体验和数据管理效率。全文搜索是其中一种常见的搜索方式,它可以根据关键词从数据库或文本文件等数据源中检索相关的内容。

    1 年前
  • 如何将 Fastify 应用程序部署到 Docker 容器

    在本文中,我们将学习如何使用 Docker 容器来部署 Fastify 应用程序。Docker 是一个容器化平台,它可以让我们在一个独立的环境中打包、分发和部署应用。

    1 年前
  • React Native 实现路由控制及 Redux 状态管理

    React Native 是一种基于 JavaScript 的开源框架,它可以让开发者使用类似于 React 的编程模式来创建原生 iOS 和 Android 应用程序。

    1 年前

相关推荐

    暂无文章