创建中继查询时是否可以选择包含参数?
见下文我正在查询资源,我很难在这里编写params。
我想有条件地包含其中一些参数,例如date_gt和date_lt。目前我必须为这些设置初始值,但由于我需要查询没有日期的记录,因此会崩溃。
如果我不能这样做,可以在这里将null
作为值发送给参数,因为我现在没有太多运气。
fragments: {
viewer: () => Relay.QL`
fragment on Viewer {
resources(
first: $pageSize
q: $q
type: $types
license: $licenses
order: $order
access_rights: "published"
orphan: true
date_gt: $dateFrom
date_lt: $dateTo
)
{
total
edges {
node {
${ArticleResult.getFragment('resource')}
}
}
pageInfo {
hasNextPage
}
}
}
`
},
答案 0 :(得分:1)
是的,我们可以提供null
作为Relay(客户端)中可选参数的值。
但是,我们也可以为这些可选参数提供默认值。例如,在GraphQL架构中,字段resources
可以是:
resources: {
type: ResourceConnection,
args: {
// other args go here
date_gt: {
type: GraphQLString,
defaultValue: '1970-01-01'
},
date_lt: {
type: GraphQLString,
defaultValue: '2030-12-31'
},
...connectionArgs
},
resolve: async (root, {...otherArgs, date_gt, date_lt, ...args}) => {
// Check date_gt and/or date_lt values. If they equal the default
// invalid values, ignore them while calculating output. Sometimes it
// is possible that the default values are good enough to be equivalent
// of user-provided values.
return output;
},
},
如果我们没有为可选参数提供默认值,我们可以将可选参数的值设置为null
。在这种情况下,服务器端收到undefined
值:
resources: {
type: ResourceConnection,
args: {
// other args go here
date_gt: {
type: GraphQLString,
},
date_lt: {
type: GraphQLString,
},
...connectionArgs
},
resolve: async (root, {...otherArgs, date_gt, date_lt, ...args}) => {
console.log(`date_gt: ${date_gt}, date_lt: ${date_lt}`);
// Check date_gt and/or date_lt values. If they are not provided,
// date_gt and date_lt are `undefined`. Calculate output accordingly.
return output;
},
},