Javascript 是否可以使用变量来选择字段?

Javascript 是否可以使用变量来选择字段?,javascript,graphql,Javascript,Graphql,我有下面这样的模板函数 我想发送一封电子邮件,一些关于用户电子邮件的信息 $email变量起作用,但是我似乎无法让它接受项目列表的第二个变量 const getUser = (email, items = ['email']) => ({ query: ` query ($email: String!, $items: [String]) { allUsers(condition:{ email: $email }) { edges {

我有下面这样的模板函数

我想发送一封电子邮件,一些关于用户电子邮件的信息

$email
变量起作用,但是我似乎无法让它接受项目列表的第二个变量

const getUser = (email, items = ['email']) => ({
  query: `
    query ($email: String!, $items: [String]) {
      allUsers(condition:{ email: $email }) {
        edges {
          node {
            $items
          }
        }
      }
    }
  `,
  variables: {
    email,
    items,
  },
});
如何动态传递查询返回的项目列表?

由于查询本身是一个(模板)字符串,您可以尝试如下操作:

const getUser=(email,items=['email'])=>({
查询:`
查询($email:String!,$items:[String]){
诱惑者(条件:{email:$email}){
边缘{
节点{
${items}
}
}
}
}
`,
变量:{
电子邮件,
项目,
},
});
由于查询本身是一个(模板)字符串,您可以尝试如下操作:

const getUser=(email,items=['email'])=>({
查询:`
查询($email:String!,$items:[String]){
诱惑者(条件:{email:$email}){
边缘{
节点{
${items}
}
}
}
}
`,
变量:{
电子邮件,
项目,
},
});

将变量转换为字段的唯一方法是使用
@skip
@include
指令:

此处,仅当
image
变量为true时,才会包含
image
字段,如果变量为false,则跳过该字段。
@skip
指令的工作方式相同,但工作方式相反。对于很多领域来说,这是不可持续的,但这是实现你想要实现的目标的唯一内在方式


如果您能够修改服务器代码,那么您可能会创建一个工作方式类似的自定义指令,但会接受字符串值数组并从该列表中创建一个选择集。然后可以将变量传递给该自定义指令。但同样,这假设您可以修改服务器端代码,情况可能并非如此。

将变量转换为字段的唯一方法是使用
@skip
@include
指令:

此处,仅当
image
变量为true时,才会包含
image
字段,如果变量为false,则跳过该字段。
@skip
指令的工作方式相同,但工作方式相反。对于很多领域来说,这是不可持续的,但这是实现你想要实现的目标的唯一内在方式


如果您能够修改服务器代码,那么您可能会创建一个工作方式类似的自定义指令,但会接受字符串值数组并从该列表中创建一个选择集。然后可以将变量传递给该自定义指令。但同样,这假设您可以修改服务器端代码,但情况可能并非如此。

我认为最好(唯一?)的方法是对每个字段使用
if
指令。我认为最好的(唯一的?)方法是对每个字段使用
if
指令。或者为您需要的每个变量创建一个片段。是的,这确实有效,但理想情况下,我希望使用变量,因为目前我正在控制输入,将来可能需要用户定义,我不希望冒注入风险!是的,这确实有效,但理想情况下,我希望使用变量,因为目前我正在控制输入,将来可能需要用户定义,我宁愿不冒注入风险!
query MyQuery($image: Boolean!) {
  pokemons(first: 10) {
    name
    image @include(if: $image)
  }
}