使用 Apollo Client 带参数的 GraphQL 查询时遇到的问题及解决办法

阅读时长 5 分钟读完

引言

GraphQL 作为一款数据查询语言,可有效地降低前后端的耦合度,加速开发效率,并提供了更好的数据查询方式。在使用 GraphQL 进行数据查询时,Apollo Client 是一个非常好的选择。

Apollo Client 提供了丰富的查询及更新数据的 API,支持查询带参数的 GraphQL 数据。不过,在使用带参数的 GraphQL 查询时,我们可能会遇到一些问题。本文主要介绍 Apollo Client 中使用带参数的 GraphQL 查询时,遇到的问题及解决方法。

问题描述

在开发中,我们经常会使用带参数的 GraphQL 请求来查询数据。例如,我们需要查询一个用户的详细信息,可以发送如下的 GraphQL 请求:

上述查询中,我们设置了一个 $id 参数,类型为 ID!。该参数用于查询用户详细信息,而且是必填参数。

使用 Apollo Client,我们可以通过如下的方法发送查询请求:

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

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

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

上述代码中,我们使用了 useQuery 钩子函数,指定了 GET_USER 查询请求,并通过 variables 参数传递了 $id 参数的值。

但是,当我们运行代码时,可能会遇到如下的错误信息:

这个错误信息提示我们没有正确地为 $id 参数传递值,即使我们已经在 variables 参数中传递了。

问题分析

上述问题发生的原因是:在 Apollo Client 中,如果查询请求中包含变量参数,并且该变量是必填参数(即类型为 XXX!),则需要在 variables 参数中进行赋值,否则就会出现上述错误。

具体来说,useQuery 钩子函数会将 variables 参数作为查询请求的参数请求,然后将其中的变量在查询请求中进行替换。但是,如果在 variables 中没有为必填参数赋值,将会导致查询请求中的必填参数出现空值或为 undefined,从而导致 GraphQL 异常。

在我们的例子中,id 参数为必填参数,但是在 variables 参数中没有进行赋值。因此,Apollo Client 在执行查询请求时,会检查必填参数的值是否为空,并根据不同的情况生成相应的错误。

解决办法

为了解决上述问题,我们需要正确设置变量参数的值,并将其传递到 useQuery 钩子函数的 variables 参数中。

可以通过以下两种方式解决:

  • 使用默认值

在 GraphQL 中,我们可以为变量参数设置默认值。在定义查询请求时,可以使用 $id: ID! = 0 这样的方式设置变量 $id 的默认值为 0。如果 variables 参数中未指定 $id 的值,则使用默认值。

使用默认值后,我们可以将 $id 参数类型从 ID! 更改为 ID,这样即使不传递 $id 参数值,GraphQL 也不会抛出异常。

修改后的查询请求如下:

使用 Apollo Client 发送带参数的查询请求时,可以将 variables 参数中 $id 参数的默认值设置为 0

如果 userIdundefinednull,则使用 $id 参数的默认值 0

  • 排除必填参数

除了使用默认值外,我们还可以将必填参数排除在外,避免将其置为空值或未定义状态。

可以通过删除必填参数类型 ! 的方式实现。在查询请求中,将参数类型从 XXX! 更改为 XXX,并将查询请求中的必填参数作为可选参数进行处理。

修改后的查询请求如下:

使用 Apollo Client 发送带参数的查询请求时,可以将 variables 参数中的 $id 参数设置为可选参数,并在没有值的情况下将其设置为 undefined

这样,即使 userIdundefinednull,$id参数也将是undefined`,而不会将其设置为空值或未定义状态,从而避免了 GraphQL 的异常情况。

总结

在使用 Apollo Client 进行带参数的 GraphQL 查询时,如果参数中包含必填参数,要注意必须正确地为其赋值,否则将会引发 GraphQL 异常,导致查询失败。

本文介绍了两种解决方法:使用默认值和将必填参数排除在外。通过正确地绑定变量参数,我们可以成功地进行带参数的 GraphQL 查询,提高了开发效率并避免了 GraphQL 异常,对前端开发有一定的指导意义。

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

纠错
反馈

纠错反馈