将参数传递给GraphQL查询很容易。但是GraphQL片段呢?
此代码包含一些完全正常的查询,带有参数(itemId)和有关我尝试执行的操作的提示(includeExtraResults):
export const GET_ITEM = gql`
query GetItem($itemId: ID!, $includeExtraResults:BOOLEAN) {
container {
item(itemId: $itemId) {
itemId
someField
innerItem(someExtraOption: $includeExtraResults) {
...InnerItemFragment
}
}
}
}
${INNER_ITEM_FRAGMENT}
`;
export const INNER_ITEM_FRAGMENT = gql`
fragment InnerItemFragment on InnerItemType {
innerItemId
innerInnerItem(someExtraOption: $includeExtraResults) {
someFields
}
}
${INNER_INNER_ITEM_FRAGMENT}
`;
export const INNER_INNER_ITEM_FRAGMENT = gql`
/* (not detailed here) */
`;
当内部项目作为内部项目的一部分被自动查询时,我不希望它们返回过滤器工作的 field 。客户端也不知道逻辑。相反,我想使用 parameter ,并且逻辑是在服务器端确定的。
尽管如此,他们的查询仍以需要(可选)参数“ includeExtraResults”的方式实现,该参数首先传递给GetItem。
那么,有没有办法将“ includeExtraResults”传递给内部片段?为了使它有意义,应该更改什么?在现实生活中,这是一个复杂的系统,内部碎片很多级。
答案 0 :(得分:1)
如here所述,您必须在使用片段变量之前显式启用它们:
import { enableExperimentalFragmentVariables } from 'graphql-tag'
enableExperimentalFragmentVariables()
这至少应该让您在包含的片段中使用在操作中定义的变量。请注意,这仍然是实验性功能,并不是规范的正式组成部分-正在进行的对话,请参见this issue。
答案 1 :(得分:1)
不一样,但仍然相关:
您可以在 Fragments 中使用查询的变量:
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
}
}
}
}
此信息来自 the official guide