Javascript 无法传递GraphQL内部的数组-反应本机
我正在用GraphQL构建React本地移动应用程序。现在我一直在处理GraphQL中的传递数组。我一直使用redux thunk作为中间件将数据传递给GraphQL 我的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
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',
},
}),
)