如何使用 GraphQL 动态加载数据

阅读时长 9 分钟读完

GraphQL 是一种用于构建 API 的查询语言,它可以根据客户端的需要动态加载数据。相比 RESTful API 需要多次请求才能获取所需数据,GraphQL 只需要一次请求即可获取需要的数据,将前端的负担大大降低。在前端领域,GraphQL 也被广泛应用于构建跨平台的移动应用以及大型 Web 应用的数据层。

在本文中,我们将讨论如何使用 GraphQL 动态加载数据,并提供代码示例。

什么是 GraphQL?

GraphQL 是 Facebook 开源的一种 API 查询语言和运行时,它是一种客户端驱动的 API 模式,可以根据客户端的需求灵活地构建和组合查询。GraphQL 的核心思想是以数据为中心,前端定义和描述需要的数据结构,GraphQL 然后负责将这些请求转化为具体的数据。

GraphQL 的优点

相比传统的 RESTful API,GraphQL 具有以下优点:

  • 灵活性:GraphQL 可以按需获取数据,客户端可以根据需求灵活地组合查询语句,这使得前端可以快速构建自己所需的数据结构;
  • 性能优化:GraphQL 只返回客户端请求的数据,避免不必要的数据传输,从而降低网络带宽的消耗;
  • 可扩展性:GraphQL 可以轻松添加新的资源类型和字段,而不用修改现有代码;
  • 文档化:GraphQL 的数据结构和 API 文档都是自动生成的,减少维护文档的成本。

GraphQL 的基本术语

在掌握 GraphQL 的使用方法之前,需要先学习 GraphQL 的一些基本术语和概念。

Schema

Schema 是一种定义类型和字段的语言,它规定了客户端可以请求的数据类型、字段、以及类型之间的关系。

Query

Query 是由客户端发送给服务器的请求,它定义了客户端要请求的数据结构。

Mutation

Mutation 是一种用于修改数据的请求,类似于 RESTful API 中的 POST、PUT 和 DELETE 请求。

Resolver

Resolver 是用于处理 Query 和 Mutation 的函数,它接收客户端发来的请求,并返回需要的数据。

Subscription

Subscription 是一种用于实时更新数据的 GraphQL 特性,它可以让客户端监听服务器端的数据变化。

如何使用 GraphQL

在 React 应用中使用 GraphQL 是一种比较常见的做法,下面我们将带领大家学习如何使用 GraphQL。

安装依赖

首先,我们需要使用 npm 或者 yarn 安装相应的依赖库:

或者

定义一个 Query

我们可以通过以下代码定义一个 Query:

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

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

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

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

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

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

上述代码中,我们通过 gql 函数定义了一个 Query,Query 的名称为 GET_USERS,Query 的内容为请求 users 的列表,每个 user 包含 idnameemail 三个字段。

接着,我们通过 useQuery hook 使用定义好的 Query,当数据正在加载时,我们显示 Loading...,当加载完成之后,我们通过 map 函数将 users 列表渲染出来。

缓存数据

Apollo 提供了一个本地缓存来管理数据请求缓存,这可以避免多次请求同一段代码。以下是我们添加缓存的代码:

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

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

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

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

Subscription

使用 Subscription 来实时更新数据也非常方便。以下是一个 Subscription 示例代码:

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

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

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

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

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

在上述代码中,我们定义了一个名为 NEW_COMMENT 的 Subscription,它会监听服务器是否有新的 Comment 数据。如果有,我们将展示新的 Comment 信息。

Mutation

使用 Mutation 也非常方便。下面是一个示例代码:

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

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

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

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

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

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

在上述代码中,我们通过 useMutation hook 定义了一个名为 ADD_TODO 的 Mutation,它可以增加一条 Todo 数据。当数据修改完成时,我们需要更新缓存。在示例代码中,我们使用了 update 方法来处理缓存的更新。同时,我们也可以加上 optimisticResponse 选项来模拟增加数据时的效果。

到这里,我们已经学习了 GraphQL 的一些基本术语和使用方法,了解了如何在 React 应用中使用 GraphQL 来动态加载数据。

总体上,GraphQL 使用简单、灵活性强、性能高,如果你想快速构建大型的数据层,我们鼓励你尝试使用 GraphQL。

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

纠错
反馈

纠错反馈