因此,我具有如下所示的模板功能。
我想传递一封电子邮件,一些有关该用户电子邮件的内容。
$email
变量有效,但是我似乎无法让它接受项目列表的第二个变量。
const getUser = (email, items = ['email']) => ({
query: `
query ($email: String!, $items: [String]) {
allUsers(condition:{ email: $email }) {
edges {
node {
$items
}
}
}
}
`,
variables: {
email,
items,
},
});
如何动态传递要查询返回的项目列表?
答案 0 :(得分:1)
由于查询本身是一个(模板)字符串,因此您可以尝试执行以下操作:
const getUser = (email, items = ['email']) => ({
query: `
query ($email: String!, $items: [String]) {
allUsers(condition:{ email: $email }) {
edges {
node {
${items}
}
}
}
}
`,
variables: {
email,
items,
},
});
答案 1 :(得分:1)
将变量转换为字段的唯一方法是使用@skip
和@include
伪指令。 For example:
query MyQuery($image: Boolean!) {
pokemons(first: 10) {
name
image @include(if: $image)
}
}
仅在image
变量为true时才包含image
字段,而在变量为false时将跳过。 @skip
指令的工作方式相同,但相反。对于许多领域来说,这是不可持续的,但这是完成您要达到的目标的唯一内置方法。
如果您能够修改服务器代码,则可以潜在地创建一个自定义指令,该指令的工作原理类似,但是可以接受字符串值的数组并从该列表中创建选择集。然后可以将变量传递给该自定义指令。但是,再次假设您可以修改服务器端代码,而事实并非如此。