如何在 Next.js 项目中使用 Apollo Client?

阅读时长 7 分钟读完

前言

Apollo Client 是一个功能强大的 GraphQL 客户端工具。它提供了用于查询、缓存和更新数据的一套工具,是在 Next.js 项目中使用 GraphQL 的最佳选择之一。

在本文中,我们将介绍如何在 Next.js 项目中使用 Apollo Client。我们将涵盖以下方面:

  1. 安装和配置 Apollo Client;
  2. 在 Next.js 中的 Apollo Client 集成;
  3. 编写 GraphQL 查询和服务器端数据预取;
  4. 在 Next.js 中的缓存实现;
  5. 接下来的步骤。

安装和配置 Apollo Client

为了在 Next.js 项目中使用 Apollo Client,我们首先需要将它安装在项目中:

安装完成后,我们需要在项目中创建 Apollo Client 的实例。我们可以在文件 lib/apolloClient.js 中定义一个函数来创建 Apollo Client,该函数如下所示:

在此示例中,我们创建了一个名为 client 的 Apollo Client 实例。我们通过 uri 属性指定了 GraphQL 服务器的端点 URL,cache 属性使用了 InMemoryCache,这是一个简单的本地机制,用于缓存查询结果。

Next.js 中的 Apollo Client 集成

在项目中创建了 Apollo Client 实例后,我们需要在 Next.js 中集成它。集成 Apollo Client 的最佳方式是通过 Next.js 中的页面生命周期函数。

我们可以为每个页面定义 getStaticPropsgetServerSideProps。如果我们需要在服务器端渲染 GraphQL 数据,则应使用 getServerSideProps。否则,使用 getStaticProps 从服务端预取数据:

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

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

  ------ -
    ------ -
      ------ -----------
    --
  --
-
展开代码

我们将 gql 导入到文件中,这是一个与字符串模板配合使用的模板标记函数,它允许我们定义 GraphQL 查询。我们使用 client.query 函数来发送查询请求。在此示例中,我们查询了一个名为 GET_USERS 的查询,该查询请求了所有用户的 ID 和名称。

getStaticProps 函数中,我们返回一个包含从服务器预取的数据的对象。在此示例中,我们返回了从服务器获取的用户数据。

编写 GraphQL 查询和服务器端数据预取

在我们拥有了 Apollo Client 实例并将其集成到 Next.js 项目中后,我们可以开始编写 GraphQL 查询。我们可以使用 Apollo Client 提供的用户自定义 Hook,其中最常用的一个是 useQuery

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

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

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

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

  ------ -
    ----
      ---------------------- -- -
        --- ------------------------------
      ---
    -----
  --
-
展开代码

在此示例中,我们首先定义了一个名为 USERS_QUERY 的 GraphQL 查询。我们使用 useQuery Hook,在组件内部对查询进行检索。如果数据正在加载,则显示 "Loading users...";否则,我们遍历数据的用户数组并显示每个用户的姓名。

在 Next.js 中的缓存实现

在 Next.js 项目中使用 Apollo Client 的另一个重要方面是缓存。客户端缓存可以帮助我们提高应用程序性能并减少网络请求。

Apollo Client 默认启用 InMemoryCache 缓存。我们可以将其导入 lib/apolloClient.js 并自定义我们的缓存实现:

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

------ ----- ------ - --- --------------
  ---- --------------------------------
  ------ --- ---------------
    ------------- -
      ------ -
        ------- -
          ------ -
            -------- ---
            -------------- - --- -------- - --- -
              ------ ------------- -------------
            --
          --
        --
      --
    --
  ---
---
展开代码

在此示例中,我们通过定义 typePolicies 中的 Query 对象来自定义缓存。对于我们的 users 查询,我们定义了一个 fields 对象:

  • keyArgs 定义为一个空数组,这将告诉缓存该查询的确切缓存键;
  • merge 函数定义了如何合并缓存和服务器数据。在此示例中,我们将缓存中的 users 字段和从服务器获取的 users 字段合并在一个新的数组中。

接下来的步骤

在上述介绍中,我们演示了如何在 Next.js 项目中使用 Apollo Client:

  1. 安装和配置 Apollo Client;
  2. 在 Next.js 中的 Apollo Client 集成;
  3. 编写 GraphQL 查询和服务器端数据预取;
  4. 在 Next.js 中的缓存实现。

通过使用 Apollo Client 中的各种功能,我们可以更轻松地管理我们的应用程序的状态和数据。我们也可以使用一些高级工具来优化性能和确保安全性,例如使用 Apollo Federation 简化多个 GraphQL 服务的管理。

我们希望这篇文章可以帮助你开始在 Next.js 项目中使用 Apollo Client。如需更多信息,请参阅 Apollo Client 文档

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

纠错
反馈

纠错反馈