不应该';是否在GraphQL中的片段调用上定义t变量?
我是GraphQL新手。我正在浏览网页,发现了一些我觉得很奇怪的东西 向片段中的变量传递数据的方法是通过片段所属的根查询来完成。为方便起见,此处重复文档中给出的示例不应该';是否在GraphQL中的片段调用上定义t变量?,graphql,graphql-fragments,Graphql,Graphql Fragments,我是GraphQL新手。我正在浏览网页,发现了一些我觉得很奇怪的东西 向片段中的变量传递数据的方法是通过片段所属的根查询来完成。为方便起见,此处重复文档中给出的示例 query HeroComparison($first: Int = 3) { leftComparison: hero(episode: EMPIRE) { ...comparisonFields } rightComparison: hero(episode: JEDI) { ...compariso
query HeroComparison($first: Int = 3) {
leftComparison: hero(episode: EMPIRE) {
...comparisonFields
}
rightComparison: hero(episode: JEDI) {
...comparisonFields
}
}
fragment comparisonFields on Character {
name
friendsConnection(first: $first) {
totalCount
edges {
node {
name
}
}
}
}
我的问题是,为什么herocomparation
定义要传递给封闭片段的参数,而不是直接传递给片段?我们在片段中使用变量,所以不应该是这样的吗
query HeroComparison {
leftComparison: hero(episode: EMPIRE) {
...comparisonFields($first: Int = 3)
}
rightComparison: hero(episode: JEDI) {
...comparisonFields($first: Int = 3)
}
}
fragment comparisonFields on Character {
name
friendsConnection(first: $first) {
totalCount
edges {
node {
name
}
}
}
}
因为这是重复的,我们甚至可以做类似的事情
query HeroComparison {
leftComparison: hero(episode: EMPIRE) {
...comparisonFields
}
rightComparison: hero(episode: JEDI) {
...comparisonFields($first: Int = 2)
}
}
fragment comparisonFields on Character {
*var $first: Int
name
friendsConnection(first: $first = 3) {
totalCount
edges {
node {
name
}
}
}
}
我问这个问题的主要问题是,如果我们希望comparisonFields
的第一个实例化在相同的查询中获得值3
,第二个实例化获得值2
,该怎么办
文档页面对此没有提及任何内容
另外,从关注点分离的角度来看,第二种和第三种方法不是更好吗?详细讨论了您的方法的优缺点。根据规范-。。。变量是为操作定义的(简而言之,仅在外部查询/变异中声明…在“body”中,您只能“使用变量”/使用$value)。。。您可以使用别名以不同的值进行查询(定义两个变量,每个别名查询一个变量)。Hi@xadm谢谢您的回复。虽然我可以理解你的意思,但这不就是GraphQL带来的REST好处吗?哪一个?还是有可能你想要什么。。。仍然比其他人灵活得多