GraphQl 操作中的参数?
arguments in GraphQl operations?
我无法理解客户端查询传递的参数与模式和解析器中服务器端操作中的参数之间的关系
在 Apollo docks 中,他们正在创建 space 向客户显示启动信息的旅行预订应用程序,该应用程序默认显示 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 参数在模式和解析器中启动??
只有一件事可以 'mysterious',不明显 - 内联解构 ...
来自 general graphql server docs - 解析器函数采用 4 个参数 (obj, args, context, info)
,其中
args - The arguments provided to the field in the GraphQL query.
您的解析器
`launches: async (_, { pageSize = 20, after }, { dataSources }) => {`
使用 ES6 解构赋值语法,'shortened version' of:
launches: async (_, args, context) => {
const { pageSize = 20, after } = args;
const { dataSources } = context;`
从架构 launches
可以有 2 个参数(pageSize
和 after
),它们作为 args
对象属性传递给解析器。
两个参数都是可选的(可以为空——也来自模式),但处理方式略有不同——请参阅 default/fallback:
的解构声明
const { pageSize = 20, after } = args;
对于缺少的两个参数(客户未提供)pageSize
将使用默认值 20
而 after
将被 null
编辑。
对于传递的两个参数 - 将使用两个值(而不是默认值)。
这是描述的标准 JS ES6 行为 here。
我无法理解客户端查询传递的参数与模式和解析器中服务器端操作中的参数之间的关系
在 Apollo docks 中,他们正在创建 space 向客户显示启动信息的旅行预订应用程序,该应用程序默认显示 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 参数在模式和解析器中启动??
只有一件事可以 'mysterious',不明显 - 内联解构 ...
来自 general graphql server docs - 解析器函数采用 4 个参数 (obj, args, context, info)
,其中
args - The arguments provided to the field in the GraphQL query.
您的解析器
`launches: async (_, { pageSize = 20, after }, { dataSources }) => {`
使用 ES6 解构赋值语法,'shortened version' of:
launches: async (_, args, context) => {
const { pageSize = 20, after } = args;
const { dataSources } = context;`
从架构 launches
可以有 2 个参数(pageSize
和 after
),它们作为 args
对象属性传递给解析器。
两个参数都是可选的(可以为空——也来自模式),但处理方式略有不同——请参阅 default/fallback:
的解构声明 const { pageSize = 20, after } = args;
对于缺少的两个参数(客户未提供)pageSize
将使用默认值 20
而 after
将被 null
编辑。
对于传递的两个参数 - 将使用两个值(而不是默认值)。
这是描述的标准 JS ES6 行为 here。