使用 Apollo Client 实现分页及筛选操作实例

阅读时长 12 分钟读完

前言

在日常开发中,分页和筛选是 Web 应用中常见的操作。借助现代前端框架和工具,可以很方便地实现这两个功能。而在这篇文章中,我们将会介绍如何利用 Apollo Client,结合 GraphQL 接口,来实现分页和筛选的功能。

Apollo Client 简介

Apollo Client 是基于 GraphQL 的现代客户端状态管理库,它提供了许多有用的功能,如缓存、错误处理等等。另外,Apollo Client 还提供了强大的工具集,如 react-apollovue-apollo 等等,来帮助我们更加方便地在 React、Vue 等前端框架中使用。

分页功能实现

在后端实现分页功能

首先,在我们的 GraphQL 后端服务中实现分页功能。这里以 Node.js + Express + GraphQL + MongoDB 为例,具体实现如下:

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

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

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

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

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

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

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

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

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

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

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

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

其中,notes Query 支持了分页的参数 limitskip,表示一次查询返回的记录数和需要跳过的记录数。

在前端实现分页功能

接下来,在前端使用 Apollo Client 实现分页功能。我们将使用 react-apollo 来实现这个功能。

首先,需要安装 react-apollo,以及相关的依赖:

然后在 React 应用中,我们可以通过 <Query> 组件和 Apollo Client 实例进行数据查询和状态管理:

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

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

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

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

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

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

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

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

在这个例子中,我们使用了 <Query> 组件查询了 notes 全部数据,并且使用了 variables={{ limit, skip }} 参数来指定分页查询的参数。同时,我们在组件中实现了 Prev 和 Next 按钮的处理函数 handlePrevhandleNext,分别用于跳转到前一页和下一页。

筛选功能实现

在后端实现筛选功能

接下来,我们要在后端实现筛选功能。还是以上面的例子为例,我们添加 notesByKeyword Query,允许通过关键字筛选笔记:

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

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

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

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

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

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

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

这个 Query 接收 keyword 参数,并通过 MongoDB 的文本搜索功能 $text$search,在笔记的 titlecontent 中进行查找。

在前端实现筛选功能

接下来,在前端使用 Apollo Client 实现筛选功能。我们依然使用 <Query> 组件,同时添加一个搜索框和搜索按钮。

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

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

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

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

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

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

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

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

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

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

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

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

在这个例子中,我们添加了一个搜索框和一个搜索按钮,并通过 handleKeywordChangehandleSearch 函数来处理搜索框的输入和搜索按钮的点击事件。在 handleSearch 函数中,我们把 searching 置为 true,从而切换查询的 Query,也就实现了搜索筛选的功能。

总结

通过本文的介绍,我们了解了使用 Apollo Client 来实现分页和筛选操作的过程。Apollo Client 提供了丰富的工具和接口,可以帮助我们更好地管理前端应用的状态和数据。在开发时,我们可以更加专注于业务逻辑的实现,而不用太关注模板渲染、路由、异步请求等底层实现细节。

感谢您的阅读,希望本文对您有所帮助,也欢迎您留下评论和建议。

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

纠错
反馈