【发布时间】:2021-11-02 16:09:27
【问题描述】:
我无法理解通过客户端查询传递的参数与架构和解析器中服务器端操作中的参数之间的关系
在Apollo docks,他们正在创建太空旅行预订应用程序,该应用程序向客户显示启动信息,该应用程序默认显示 20 个结果,当单击查看更多按钮时,它会显示另一个 20 个等等!!
现在,客户端的查询如下所示:
launches.tsx
query GetLaunchList($after: String) {
launches(after: $after) {
cursor
hasMore
launches {
...LaunchTile // a fragment
}
}
}
在架构中,Query 字段 launches 看起来像这样
type Query {
launches(
pageSize: Int
after: String
): LaunchConnection!
type LaunchConnection {
cursor: String!
hasMore: Boolean!
launches: [Launch]!
}
resolvers.js:
Query: {
launches: async (_, { pageSize = 20, after }, { dataSources }) => {
const allLaunches = // fetching data from a data source
const launches = paginateResults({
after,
pageSize,
results: allLaunches,
});
return {
launches,
cursor: launches.length ? launches[launches.length - 1].cursor : null,
hasMore: // some logic to check if there are more results
};
}
}
现在,我无法理解客户端查询中的 after 参数如何与架构和解析器相关,我知道客户端需要将此变量发送到服务器以供架构和解析器,因为服务器需要知道应该向客户端发送哪些数据,因为结果是分页的!!
graphql 如何在架构和解析器的启动中将 after 参数与 after 参数联系起来??
【问题讨论】:
-
@xadm 我了解查询是如何执行的,但我不明白 pageSize 参数是如何在参数之后出现的,graphql 服务器如何知道客户端发送的是哪一个??
-
传递的参数在第二个解析器参数中...
console.log(args),稍后分解(const { pageSize = 20, after } = args;) -
@xadm 这就是我要说的,如果我将
after参数的名称更改为cursor之类的名称,例如,服务器将如何识别它,在那部分!! -
它使用默认值进行解构 - 如果未提供...您可以传递两个参数,它们将被使用,都通过...您可以使用此查询而不变量传递,将使用 null for after
标签: graphql apollo-client react-apollo apollo-server