Javascript 将字符串数组传递给GraphQL查询,嵌入时转换为整数
我试图找到一种方法来传递字符串数组并将其嵌入到查询中(使用React、GraphQL)。问题是它接受参数作为字符串数组,但在嵌入时将其转换为字符串 假设我有一个函数,它调用来获取一些数据。(我现在硬编码了这个参数,但我一弄明白它就会变成一个变量) //我在这里调用函数Javascript 将字符串数组传递给GraphQL查询,嵌入时转换为整数,javascript,reactjs,graphql,template-literals,Javascript,Reactjs,Graphql,Template Literals,我试图找到一种方法来传递字符串数组并将其嵌入到查询中(使用React、GraphQL)。问题是它接受参数作为字符串数组,但在嵌入时将其转换为字符串 假设我有一个函数,它调用来获取一些数据。(我现在硬编码了这个参数,但我一弄明白它就会变成一个变量) //我在这里调用函数 const query = getData.generate(["123", "456"]); return GraphqlClient.query(query) .then((e) =>
const query = getData.generate(["123", "456"]);
return GraphqlClient.query(query)
.then((e) => {
return e.data.oneAppProviders;
}) .......
//这是带有嵌入参数的查询。(后端需要一个字符串数组。)
当我运行它时,会出现以下错误:
GraphQLError {message: "Syntax Error: Expected Name, found Int "456""
我猜,当我嵌入它时,它会把它转换成整数。。。
如果我的数组为[“123”],则会出现以下错误:
[GraphQL error]: Message: Expected type [String], found 123.
我希望这个问题足够清楚。提前感谢。一般来说,您应该避免像这样将数据嵌入查询语言字符串中。(如果
id
变量实际上是一个包含圆括号和大括号的字符串,该怎么办?这是一个更著名的(如果是虚构的)潜在问题示例。)
GraphQL支持顶级查询参数,您应该在此处使用这些参数。如果你提出你的问题
query Providers($ids: [ID!]!) {
oneAppProviders(id: $ids) {
id
firstName
}
}
大多数查询库都有传递附加参数的方法;所以在你的情况下,这可能看起来像
const query = gql`...`;
const variables = { ids: ids };
GraphqlClient.query(query, variables).then(...);
您的问题的简单解决方案如下:
let myarray = ["string1", "string2", "String3"];
let dataToSend = myarray.toString();
let gql`
{
passArray(data:${dataToSend}){
}
}`;
也许这有助于某人:
export const UserFlagsQuery = gql`
query($flags: [String!]!) {
user {
flags(where: { AND: [{ name_in: $flags }, { enabled: true }] }) {
name
enabled
}
}
}
`;
在Reactquery
组件中使用此查询,如下所示:
<Query
query={UserFlagsQuery}
variables={{
flags: ["flag1", "flag2", "..."],
}}
>
感谢@davidmaze的回答
<Query
query={UserFlagsQuery}
variables={{
flags: ["flag1", "flag2", "..."],
}}
>