在 Vue.js 中使用 GraphQL 和 Apollo

阅读时长 9 分钟读完

GraphQL 是一种用于 API 的查询语言。它提供了一种更高效、强大和灵活的方式来获取和提交数据。而 Apollo 是一个用于构建 GraphQL 客户端的框架,它提供了一套完整的工具链,让开发者可以轻松地在前端使用 GraphQL。

在本文中,我们将学习如何在 Vue.js 应用中使用 GraphQL 和 Apollo。我们将介绍如何设置和配置 Apollo 客户端,如何在组件中进行查询,并展示如何处理返回的数据。

安装和配置 Apollo 客户端

首先,我们需要安装所需的依赖。我们将使用 vue-apolloapollo-boost,它们可以通过 npm 或 yarn 进行安装。

接下来,我们需要在 Vue.js 应用的入口文件中,设置和配置 Apollo 客户端。在这个例子中,我们将使用 apollo-boost,它提供了一个简单的方法来创建 Apollo 客户端。

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

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

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

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

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

在上面的例子中,我们创建了一个 ApolloClient,并将它传递给 VueApollo 的构造函数,创建了一个 apolloProvider,用于在整个应用中提供 Apollo 客户端的功能。

我们还需要在 vue-apollo 中设置一个中间件,来为每个请求添加一个 Authorization 头,用于进行身份验证,这样服务器才能验证我们的请求。在这个例子中,我们使用 localStorage 存储了一个 token 来进行身份验证。

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

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

在组件中使用 GraphQL 查询

现在我们已经设置好了 Apollo 客户端,接下来我们将在组件中使用 GraphQL 查询。

首先,我们需要定义一些 GraphQL 查询。我们将使用 .graphql 文件来定义我们的查询,并使用 graphql-tag 库来解析这些查询。

在这个例子中,我们定义了一个查询 getBooks,用于获取所有的图书信息,并返回每本图书的 titleauthor

接下来,在 Vue.js 组件中,我们通过使用 apollo 选项来进行查询。

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

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

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

在上面的例子中,我们使用 apollo 选项进行查询。books 对应于我们在查询中定义的名称。我们还可以通过 loadingerror 属性来处理查询的加载和错误状态。

在组件中使用 GraphQL 变量

在某些情况下,我们需要在查询中使用参数。GraphQL 提供了 variables 关键字来处理参数,并使用 $ 符号来引用变量。在 Vue.js 中,我们可以在 apollo 选项中使用 variables 来指定变量的值。

以下是一个使用变量的示例查询,它可以根据输入的 id 获取图书的详细信息。

在组件中使用变量的示例代码如下。

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

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

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

在上面的例子中,我们通过 $route 对象来获取路由参数 id 的值,并将其传递给 variables 函数。

在组件中发送 GraphQL 变更

GraphQL 还支持发送变更(mutation)。变更用于修改或删除数据,与查询类似,我们也可以在组件中使用 apollo 选项来发送变更。

以下是一个示例变更,它可以添加一本新的图书到书库中。

在组件中使用变更的示例代码如下。

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

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

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

在上面的例子中,我们使用 mutate 方法来发送变更。我们将变更定义为一个 mutation,并使用 variables 属性来指定变量的值。在响应返回后,我们可以对数据进行处理,并更新现有的视图组件。

总结

在本文中,我们学习了如何在 Vue.js 中使用 GraphQL 和 Apollo。我们介绍了如何设置和配置 Apollo 客户端,如何在组件中进行查询,并展示了如何处理返回的数据。我们相信,这些知识可以帮助您更好地为您的 Vue.js 应用编写 GraphQL 代码,提高开发效率。

请记得,GraphQL 和 Apollo 并不是万能的,根据您的项目特点和团队的能力来选择合适的技术栈。愿你生活愉快,开发愉快!

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

纠错
反馈