在 React 和 TypeScript 中使用 Apollo GraphQL Client

阅读时长 11 分钟读完

GraphQL 是一种用于 API 的查询语言,它具有强大的类型系统和灵活的查询语法。Apollo GraphQL Client 是一个用于 GraphQL 的客户端库,它提供了一系列工具和功能来简化 GraphQL 查询的管理和处理。在本文中,我们将介绍如何在 React 和 TypeScript 中使用 Apollo GraphQL Client,以及如何利用它的一些高级功能来提高开发效率和代码质量。

安装和配置

首先,我们需要安装 Apollo GraphQL Client 和相关依赖。可以使用以下命令来安装它们:

接下来,我们需要配置 Apollo Client。在我们的 React 应用程序中,我们可以使用 apollo-boost 包来快速设置一个默认的 Apollo Client 实例。这个实例将自动设置缓存、HTTP 连接和其他一些常见的配置选项。我们可以将它导入到我们的代码中并使用 create 方法来创建一个新的 Apollo Client 实例:

这里的 uri 属性是我们 GraphQL API 的地址。我们需要将其替换为我们的实际 API 地址。如果我们的 API 位于不同的域名或端口上,我们需要在 CORS 配置中添加相应的跨域规则。

发送查询

现在我们已经有了一个配置好的 Apollo Client 实例,我们可以开始发送查询了。我们可以使用 react-apollo 包中的 Query 组件来发送一个 GraphQL 查询和获取数据。以下是一个简单的示例:

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

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

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

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

在这个示例中,我们定义了一个名为 GET_USERS 的 GraphQL 查询,它将返回所有用户的 ID、名称和电子邮件。然后,我们使用 Query 组件来发送这个查询,并在回调函数中处理查询结果。如果查询正在加载,则显示一个“Loading...”消息。如果出现错误,则显示一个“Error :(”消息。否则,我们将渲染一个包含所有用户的列表。

发送变更

除了发送查询之外,我们还可以使用 Apollo Client 发送变更(mutation)。变更是一种用于修改数据的 GraphQL 操作,它可以创建、更新或删除数据。我们可以使用 Mutation 组件来发送一个 GraphQL 变更和更新数据。以下是一个简单的示例:

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

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

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

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

在这个示例中,我们定义了一个名为 ADD_USER 的 GraphQL 变更,它将添加一个新用户并返回其 ID、名称和电子邮件。然后,我们使用 Mutation 组件来发送这个变更,并在回调函数中处理变更结果。我们渲染一个表单,用户可以输入新用户的名称和电子邮件。当用户提交表单时,我们将调用 addUser 方法来发送变更,并将新用户的名称和电子邮件作为参数传递给它。最后,我们清空输入字段,以便用户可以添加另一个用户。

使用高级功能

Apollo GraphQL Client 还提供了许多其他高级功能,例如缓存、本地状态管理、类型检查和错误处理。这些功能可以帮助我们更好地管理和处理 GraphQL 数据,并提高开发效率和代码质量。以下是一些示例:

缓存

Apollo Client 使用缓存来存储和管理查询结果。它可以自动处理查询结果的更新和合并,并提供一些选项来控制缓存的行为。我们可以通过以下方式来配置缓存:

这里我们使用 apollo-cache-inmemory 包中的 InMemoryCache 类来创建一个新的缓存实例,并将它传递给 Apollo Client。然后,我们可以使用 cache 属性来访问缓存实例,并使用它来读取和写入缓存数据。

本地状态管理

Apollo Client 还提供了一些工具来处理本地状态管理。我们可以使用 ApolloLinkObservable 等工具来创建本地状态更新和订阅。以下是一个简单的示例:

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

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

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

在这个示例中,我们使用 apollo-link-state 包中的 withClientState 方法来创建一个新的本地状态链接。我们将缓存实例和一些本地解析器传递给它,并使用 Mutation 字段来定义一个名为 setVisibilityFilter 的本地变更。当这个变更被调用时,我们将更新缓存中的 visibilityFilter 数据。然后,我们使用 ApolloLink.from 方法来将本地状态链接和 HTTP 链接合并成一个 Apollo 链。

类型检查

Apollo GraphQL Client 还提供了一些工具来进行类型检查。我们可以使用 graphql-tag 包中的 gql 方法来定义 GraphQL 查询和变更,并使用 TypeScript 的类型定义来检查它们的参数和返回值。以下是一个简单的示例:

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

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

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

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

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

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

在这个示例中,我们使用 TypeScript 的接口来定义用户和用户数据类型,以及查询和变更的参数和返回值类型。我们还将这些类型传递给 useQuery 方法,以便 TypeScript 可以检查它们的正确性。

错误处理

Apollo GraphQL Client 还提供了一些工具来处理 GraphQL 查询和变更的错误。我们可以使用 react-apollo 包中的 ApolloError 类来捕获和处理错误,并使用 onError 属性来定义一个全局错误处理程序。以下是一个简单的示例:

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

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

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

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

在这个示例中,我们使用 ApolloError 类来捕获 GraphQL 查询的错误,并在控制台中显示错误消息。我们还将错误处理程序传递给 Query 组件,以便它可以在出现错误时调用它。

结论

在本文中,我们介绍了如何在 React 和 TypeScript 中使用 Apollo GraphQL Client,并利用它的一些高级功能来提高开发效率和代码质量。我们学习了如何发送查询和变更,如何使用缓存和本地状态管理,如何进行类型检查和错误处理。我们希望这篇文章对你有所帮助,并可以帮助你更好地理解和应用 Apollo GraphQL Client。

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

纠错
反馈