gpt4 book ai didi

relayjs - 如何在 Relay 中管理游标和排序?

转载 作者:行者123 更新时间:2023-12-04 15:09:28 26 4
gpt4 key购买 nike

我们有一个 graphql 服务器(不是用 javascript 编写的)服务于一个分页的对象列表。我们正在尝试符合中继规范,但我们遇到了一个有趣的案例,可以使用说明。

具体来说:是否允许游标依赖于连接的其他输入?类似于 https://github.com/graphql/graphql-relay-js/issues/20 ,我们的连接采用 sort_key 参数来确定返回列表的排序顺序。根据指定的排序顺序,对象的边可能返回不同的游标值(因为服务器在每种情况下都需要不同的信息来确定下一个对象)。然而,仔细阅读https://facebook.github.io/relay/docs/guides-mutations.html#range-add表明这是不允许的;返回新创建的边的突变必须返回一个可以普遍应用于该边可能出现的所有可能列表的单个游标? facebook是如何解决这个问题的?

最佳答案

我有同样的问题。所以,我决定写一篇 npm包来处理这个问题。

您可以使用 fast-relay-pagination用于排序的 npm 包,向后和向前 pagination和过滤器 Mongoose型号或 MongoDB目的。

此包改进 graphql-relay 延迟加载 通过使用 MongooseMongoDB查找和限制。如您所知,graphql-relay's connectionFromArray获取所有数据并对数据进行切片,对于大量数据来说效率不高。

您可以在下面看到一个示例:

...
import {
fetchConnectionFromArray
} from 'fast-relay-pagination'
...
export default{
type: orderConnection.connectionType,
args: {
...connectionArgs,
orderFieldName: {
type: GraphQLString,
},
sortType: {
type: GraphQLInt,
},
},
resolve: needAdmin(async (_, args) => {
let orderFieldName = args.orderFieldName || '_id'
let sortType = args.sortType || -1
let after = args.after
let before = args.before
let filter = args.filter
let first = args.first
let last = args.last
return fetchConnectionFromArray({
dataPromiseFunc: SampleModel.find.bind(SampleModel), // required
filter, // optional (for using filter on model collection) - for example => {username: 'test'}
after, //optiona
before, // optional
first, //optional
last, // optional
orderFieldName, // optional
sortType, // optional
})
}),
}

关于relayjs - 如何在 Relay 中管理游标和排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34948216/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com