Javascript 无法传递GraphQL内部的数组-反应本机

Javascript 无法传递GraphQL内部的数组-反应本机,javascript,arrays,react-native,graphql,mutation,Javascript,Arrays,React Native,Graphql,Mutation,我正在用GraphQL构建React本地移动应用程序。现在我一直在处理GraphQL中的传递数组。我一直使用redux thunk作为中间件将数据传递给GraphQL 我的GraphQL变异信息: createVirtualChallenge( name: String! target: String! image: String description: String from: String! to: String! selectedUsers: [String] ): VirtualCha

我正在用GraphQL构建React本地移动应用程序。现在我一直在处理GraphQL中的传递数组。我一直使用redux thunk作为中间件将数据传递给GraphQL

我的GraphQL变异信息:

createVirtualChallenge(
name: String!
target: String!
image: String
description: String
from: String!
to: String!
selectedUsers: [String]
): VirtualChallengeResponse!
我已将所选用户作为数组传递,如下所示:

[“5e2148d4b76df200314f4848”、“5e213e6ab76df200314f47c4”]

我的redux thunk fetch函数如下

   fetch(URL.BASE_URL, {
        method: 'POST',
        headers: {
          'Content-Type': 'application/json',
          Authorization: 'Bearer ' + token,
        },
        body: JSON.stringify({
          query: `mutation{ createVirtualChallenge( name:"${name}", target:"${target}", image:"${image_name}", description:"${description}", from:"${from}", to:"${to}", selectedUsers: "${selectedUsers}" , ){ success } }`,
        }),
      })
        .then(res => res.json())
所有值都通过使用redux的道具传递

如果数组长度为1,则此变异有效。。但如果数组长度大于1,则GraphQL将抛出一个错误

来自URL的响应-{“data”:null,“errors”:[{“extensions”: [对象],“位置”:[数组],“消息”:“虚拟挑战” 验证失败:selectedUsers:值“”的转换到数组失败[ 路径处的“5e213e6ab76df200314f47c4,5e214493b76df200314f47fa']\” \“selectedUsers\”,“路径”:[Array]}]


删除该参数的引号,因为该引号用于包装字符串。因为它是一个数组,可以转换为相应的JSON字符串,这将是graphql的有效数组输入

selectedUsers:${selectedUsers}
===>
selectedUsers:${JSON.stringify(selectedUsers)}


决不能使用字符串插值将值注入GraphQL查询。首选的方法是利用变量,这些变量可以作为JSON对象与查询一起发送,GraphQL服务将对其进行适当的解析

例如,代替

mutation {
  createVirtualChallenge(name: "someName"){
    success
  }
}
你会写:

mutation ($name: String!) {
  createVirtualChallenge(name: $name){
    success
  }
}
然后将
name
的值与您的请求一起传递:

fetch(
  ...
  body: JSON.stringify({
    query: `...`,
    variables: {
      name: 'someName',
    },
  }),
)

为要动态注入查询的每个参数值使用一个变量。这比自己尝试注入值更容易,因为您不必担心GraphQL特定的语法——您只需传递一个JSON对象。但是,您需要知道以这种方式替换的每个参数的类型,因此您需要参考GraphQL服务的模式。

谢谢您的回答!我尝试过这个,但它抛出了一个错误->“消息”:“语法错误:预期:,发现浮点\“5e21465\”}]}@AkilaDevinda:u可以打印字符串并共享吗that@AkilaDevinda:此值
突变{createVirtualChallenge(名称:${name}),目标:${target},图像:${image\u name},描述:${description},从:${from}到:${to}”,selectedUsers:${selectedUsers}{success}
我已经使用console.log->[“5e213e6ab76df200314f47c4”、“5e214493b76df200314f47fa”、“5e21465ab76df200314f4821”]打印了我的数组,如果需要插入一个有时需要为空的字符串值,会发生什么?您将在查询中注入
“null”
,而不是
null
。如果注入的值不是简单的标量而是输入对象类型,会发生什么情况<代码>JSON.stringify将无法正确地将更复杂的值转换为GraphQL语法,因为JSON语法和GraphQL语法不兼容。即使这修复了您的请求,字符串插值也永远不是GraphQL查询的方法。使用变量对字符串数组不起作用。您有更好的解决方案吗?@Swapnil如果您无法找到解决方案,您可以提出一个包含所有相关细节的新问题。如果不知道所有相关信息,就不可能告诉你哪里出了问题。
fetch(
  ...
  body: JSON.stringify({
    query: `...`,
    variables: {
      name: 'someName',
    },
  }),
)