在 GraphQL 应用程序中使用 JavaScript 库

阅读时长 7 分钟读完

GraphQL 是一种查询语言,用于 API 的设计和查询。它是由 Facebook 开发的,旨在替代 RESTful API。GraphQL 允许客户端指定其需要的数据,并返回完全符合其需求的数据。因此,它可以大大减少不必要的数据传输,从而提高应用程序的性能。

在本文中,我们将介绍如何使用 JavaScript 库在 GraphQL 应用程序中实现数据查询、缓存和更新。我们将使用以下技术:

  • React:用于构建用户界面。
  • Apollo Client:用于管理 GraphQL 查询和缓存数据。
  • GraphQL:用于定义和查询 API。

安装和设置

我们将从安装和设置 Apollo Client 开始。首先,我们需要安装 @apollo/client 包。您可以使用 npm 或 yarn 进行安装:

或者

接下来,我们需要定义 Apollo Client。我们将创建一个 client.js 文件,并在其中定义 Apollo Client:

在上面的代码中,我们定义了一个 Apollo Client,它将连接到 GraphQL API 的地址为 http://localhost:4000/graphql。我们还定义了一个缓存,用于管理从服务器获取的数据。

查询数据

现在,我们已经设置了 Apollo Client,我们可以开始查询数据了。我们将使用 useQuery 钩子来查询数据。我们将创建一个 App.js 文件,并在其中定义一个查询:

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

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

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

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

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

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

在上面的代码中,我们定义了一个名为 GET_BOOKS 的查询,它将从服务器获取图书的列表。我们使用 useQuery 钩子来执行查询,并使用 loadingerrordata 变量来管理查询的状态。如果查询正在加载,我们将显示 “Loading…”,如果出现错误,我们将显示 “Error :(”。

如果查询成功,我们将遍历返回的数据,并显示每个书籍的标题和作者。

缓存数据

现在,我们已经成功查询了数据,但我们如何处理缓存?我们可以使用 Apollo Client 的缓存来缓存数据。当我们再次查询相同的数据时,Apollo Client 将从缓存中获取数据,而不是从服务器获取数据。

我们将使用 writeQuery 方法将数据写入缓存。我们将修改 App.js 文件,以便在写入缓存时使用 writeQuery 方法:

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

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

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

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

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

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

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

在上面的代码中,我们使用 writeQuery 方法将数据写入缓存。我们传递了查询和数据作为参数。

现在,我们已经成功地将数据写入缓存。当我们再次查询相同的数据时,Apollo Client 将从缓存中获取数据,而不是从服务器获取数据。

更新数据

现在,我们已经成功地查询数据并缓存数据。但我们如何更新数据?我们将使用 useMutation 钩子来更新数据。我们将创建一个 AddBook.js 文件,并在其中定义一个更新:

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

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

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

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

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

在上面的代码中,我们定义了一个名为 ADD_BOOK 的更新,它将添加一本新书。我们使用 useMutation 钩子来执行更新,并使用 addBook 函数来添加新书。

我们在表单的 onSubmit 事件中调用 addBook 函数,并将书籍的标题和作者作为变量传递。当更新成功时,我们将重置表单。

结论

在本文中,我们介绍了如何使用 JavaScript 库在 GraphQL 应用程序中查询数据、缓存数据和更新数据。我们使用了 React、Apollo Client 和 GraphQL 技术。我们希望本文对您有所帮助,并为您的前端开发工作提供指导意义。

完整示例代码:https://github.com/apollographql/fullstack-tutorial/tree/master/final-client

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

纠错
反馈