我正在使用react-apollo
访问网络应用中的graphql
。
我有一个看起来像这样的查询,可以让我过滤游戏时间表:
query($pagination:Int!, $divisionId:ID, $teamId:ID, $startDate:DateTime!, $endDate:DateTime!
){
games: allGames (
orderBy: date_ASC,
first: $pagination,
filter: {
date_gte: $startDate,
date_lte: $endDate,
division: {id: $divisionId},
OR: [
{homeTeam: {id: $teamId} },
{awayTeam: {id: $teamId} },
]
}
){
id
.... more fields
}
每个请求都需要startDate
和endDate
个变量,但teamId
和divisionId
不是。我想在初始请求中显示所有teamIds
和divisionIds
,并允许根据需要使用过滤/向下钻取。
我想看看我是否可以添加一个通配符(*
)或类似的东西,但我不确定它是否可行。使用graphql突变,变量的null
值允许我编写适用于多个用例的单个突变(部分更新和创建),但我无法弄清楚如何使用查询实现类似的功能。 / p>
我是否需要针对每个过滤器方案调用不同的查询(一个用于无divisionId
& teamId
,一个用于divisionId,一个用于teamId
,另一个用于divisionId
对于teamId
和division
这两个问题是fragments能帮助我以更少的开销实现这一目标(因为最后一句使得这个过程看起来有点过于繁琐/不干)。
或者我将id
和division_in
切换为id_in
和divisionIds
并传递它们(稍大)数组,其中包含teamdIds
和{{1}}的所有可能值{{1}}作为最初的道具?
答案 0 :(得分:1)
所以事实证明你实际上将整个过滤器存储为变量(这非常棒)。
以下是更新的查询:
query( $first:Int!, $skip:Int!, $gameFilter:GameFilter! ){
games: allGames (
orderBy: date_ASC,
first: $first,
skip: $skip,
filter: $gameFilter
){
id
... more fields
}
}
以及相应的HOC:
export default graphql(gamesQuery, {
options: props => ({
return { variables: {props.gameFilter}
});
})(GamesPage);
给这些家伙提示: