前言
在日常开发中,分页和筛选是 Web 应用中常见的操作。借助现代前端框架和工具,可以很方便地实现这两个功能。而在这篇文章中,我们将会介绍如何利用 Apollo Client,结合 GraphQL 接口,来实现分页和筛选的功能。
Apollo Client 简介
Apollo Client 是基于 GraphQL 的现代客户端状态管理库,它提供了许多有用的功能,如缓存、错误处理等等。另外,Apollo Client 还提供了强大的工具集,如 react-apollo、vue-apollo 等等,来帮助我们更加方便地在 React、Vue 等前端框架中使用。
分页功能实现
在后端实现分页功能
首先,在我们的 GraphQL 后端服务中实现分页功能。这里以 Node.js + Express + GraphQL + MongoDB 为例,具体实现如下:
-- -------------------- ---- ------- -- ------- ------ -------- ---- ---------- ----- ---------- - --- ----------------- ------ - ----- ------- --------- ---- -- -------- - ----- ------- --------- ---- -- ---------- - ----- ----- -------- -------- -- ---------- - ----- ----- -------- -------- - -- ----- ---- - ---------------------- ----------- ------ ------- ----
-- -------------------- ---- ------- -- ------------ ------ ---- ---- --------------- ----- --------- - - ------ - ------ ----- --- - ----- - --- ---- - - -- -- - ----- ----- - ----- ----------- ------- ---------- -- -- ----------- ------------- ------ ----- -- ----- ----- --- - -- -- -- - ----- ---- - ----- ----------------- ------ ---- - -- --------- - ----------- ----- --- - ----- -- -- - ----- ---- - ----- ------------------ ------ ---- -- ----------- ----- --- - --- ----- -- -- - ----- ---- - ----- -------------------------- ------ - ---- ---- -- ------ ---- -- ----------- ----- --- - -- -- -- - ----- -------------------------- ------ ---- - - - ------ ------- ---------
其中,notes
Query 支持了分页的参数 limit
和 skip
,表示一次查询返回的记录数和需要跳过的记录数。
在前端实现分页功能
接下来,在前端使用 Apollo Client 实现分页功能。我们将使用 react-apollo 来实现这个功能。
首先,需要安装 react-apollo
,以及相关的依赖:
npm install --save @apollo/client graphql react-apollo
然后在 React 应用中,我们可以通过 <Query>
组件和 Apollo Client 实例进行数据查询和状态管理:
-- -------------------- ---- ------- -- -------- ------ ----- ---- ------- ------ - ------ - ---- ----------- ------ - -------------- - ---- -------------- ------ - ------------- ------------- - ---- ---------------- ------ - ----- - ---- -------------- ------ --- ---- ------------- ----- ------ - --- -------------- ---- -------------------------------- ------ --- --------------- -- ----- ----------- - ---- ----- ------------- ----- ------ ----- - ------------ ------- ----- ------ - --- ----- ------- - - - ----- --- - -- -- - ----- ------- --------- - ------------------ ----- ------ -------- - ----------------- ----- ---------- - -- -- - -- ----- -- ------ - ------------ - ------ - - ----- ---------- - -- -- - ------------ - ------ - ------ - ------ ------------------- ------------ ------ ---- --- --- ----- - ----- - -- - - -- -- -- - ----- ---- --------------- -- - --- --------------- --------------------- --------------------- ----- --- ----- ----- ------- -------------- --- -- --------------------- ---- ----------- -- ------- ---------------------------------- ------ ------ -- -------- - - ------- --------------- ---------------- ---- -- ------------------ ------------------------------- -
在这个例子中,我们使用了 <Query>
组件查询了 notes
全部数据,并且使用了 variables={{ limit, skip }}
参数来指定分页查询的参数。同时,我们在组件中实现了 Prev 和 Next 按钮的处理函数 handlePrev
和 handleNext
,分别用于跳转到前一页和下一页。
筛选功能实现
在后端实现筛选功能
接下来,我们要在后端实现筛选功能。还是以上面的例子为例,我们添加 notesByKeyword
Query,允许通过关键字筛选笔记:
-- -------------------- ---- ------- -- ------------ ----- --------- - - ------ - ------ ----- --- - ----- - --- ---- - - -- -- - -- --- -- --------------- ----- --- - ------- -- -- - ----- ----- - ----- ----------- ------ - -------- ------- - -- ------- ---------- -- -- ------ ----- -- ----- ----- --- - -- -- -- - -- --- - -- --------- - ----------- ----- --- - ----- -- -- - -- --- -- ----------- ----- --- - --- ----- -- -- - -- --- -- ----------- ----- --- - -- -- -- - -- --- - - -
这个 Query 接收 keyword
参数,并通过 MongoDB 的文本搜索功能 $text
和 $search
,在笔记的 title
和 content
中进行查找。
在前端实现筛选功能
接下来,在前端使用 Apollo Client 实现筛选功能。我们依然使用 <Query>
组件,同时添加一个搜索框和搜索按钮。
-- -------------------- ---- ------- -- -------- ------ ----- ---- ------- ------ - ------ - ---- ----------- ------ - -------------- - ---- -------------- ------ - ------------- ------------- - ---- ---------------- ------ - ----- - ---- -------------- ------ --- ---- ------------- ----- ------ - --- -------------- ---- -------------------------------- ------ --- --------------- -- ----- ----------- - ---- ----- ------------- ----- ------ ----- - ------------ ------- ----- ------ - --- ----- ------- - - - ----- ---------------------- - ---- ----- ------------------------ -------- - ----------------------- --------- - --- ----- ------- - - - ----- --- - -- -- - ----- ------- --------- - ------------------ ----- ------ -------- - ----------------- ----- --------- ----------- - ------------------ ----- ----------- ------------- - --------------------- ----- ---------- - -- -- - -- ----- -- ------ - ------------ - ------ - - ----- ---------- - -- -- - ------------ - ------ - ----- ------------ - -- -- - ------------------ - ----- ------------------- - ----- -- - ------------------------------ - ----- ----- - --------- - ---------------------- - ----------- ----- --------- - --------- - - ------- - - - ------ ---- - ------ - ------ ------------- ---------------------- --- ----- - ----- - -- - - -- -- -- - ----- ----- ------ ------------------- -- -------- --------------- ------------------------------ ---- -- ------- -------------------------------------- ------ ----- ---- --------------- -- - --- --------------- --------------------- --------------------- ----- --- ----- ----- ------- -------------- --- -- --------------------- ---- ----------- -- ------- ---------------------------------- ------ ------ -- -------- - - ------- --------------- ---------------- ---- -- ------------------ ------------------------------- -
在这个例子中,我们添加了一个搜索框和一个搜索按钮,并通过 handleKeywordChange
和 handleSearch
函数来处理搜索框的输入和搜索按钮的点击事件。在 handleSearch
函数中,我们把 searching
置为 true,从而切换查询的 Query,也就实现了搜索筛选的功能。
总结
通过本文的介绍,我们了解了使用 Apollo Client 来实现分页和筛选操作的过程。Apollo Client 提供了丰富的工具和接口,可以帮助我们更好地管理前端应用的状态和数据。在开发时,我们可以更加专注于业务逻辑的实现,而不用太关注模板渲染、路由、异步请求等底层实现细节。
感谢您的阅读,希望本文对您有所帮助,也欢迎您留下评论和建议。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6491ada448841e9894fb224e