Ele*_*ena 1 javascript reactjs graphql template-literals
我试图想出一种方法来传递一个字符串数组并将其嵌入到查询中(使用React,GraphQL).问题是它接受参数作为字符串数组,但在嵌入时将其转换为字符串.
假设我有这个函数调用来获取一些数据.(我现在对这个论点进行了硬编码,但是一旦我弄清楚它就会变成一个变量).
//这里我正在调用这个函数
const query = getData.generate(["123", "456"]);
return GraphqlClient.query(query)
.then((e) => {
return e.data.oneAppProviders;
}) .......
Run Code Online (Sandbox Code Playgroud)
//这里是带有嵌入参数的查询.(后端需要一个字符串数组.)
export default {
generate(id) {
// console.log(id) // output: ["123", "456"]
return { query : gql`{
oneAppProviders(id: ${id}) {
id
firstName
}
}
}}
Run Code Online (Sandbox Code Playgroud)
当我运行它时,我收到此错误:
GraphQLError {message: "Syntax Error: Expected Name, found Int "456""
Run Code Online (Sandbox Code Playgroud)
我想,当我嵌入它时,它将它转换为整数...如果我的数组是["123"],我会收到以下错误:
[GraphQL error]: Message: Expected type [String], found 123.
Run Code Online (Sandbox Code Playgroud)
我希望这个问题足够清楚.提前致谢.
作为一般规则,您应该避免像这样将数据嵌入到查询语言字符串中。(如果id变量实际上是包含括号和花括号的字符串怎么办? https://xkcd.com/327是您面临的潜在问题的一个更著名的示例,尽管是虚构的。)
GraphQL 支持顶级查询参数,您应该在此处使用这些参数。如果您的查询类似于
query Providers($ids: [ID!]!) {
oneAppProviders(id: $ids) {
id
firstName
}
}
Run Code Online (Sandbox Code Playgroud)
大多数查询库都有一种传递附加参数的方法;所以在你的情况下可能看起来像
const query = gql`...`;
const variables = { ids: ids };
GraphqlClient.query(query, variables).then(...);
Run Code Online (Sandbox Code Playgroud)
小智 5
解决您问题的简单方法如下:
let myarray = ["string1", "string2", "String3"];
let dataToSend = myarray.toString();
let gql`
{
passArray(data:${dataToSend}){
}
}`;
Run Code Online (Sandbox Code Playgroud)
也许这有助于某人:
export const UserFlagsQuery = gql`
query($flags: [String!]!) {
user {
flags(where: { AND: [{ name_in: $flags }, { enabled: true }] }) {
name
enabled
}
}
}
`;
Run Code Online (Sandbox Code Playgroud)
在 ReactQuery组件中使用此查询,如下所示:
<Query
query={UserFlagsQuery}
variables={{
flags: ["flag1", "flag2", "..."],
}}
>
Run Code Online (Sandbox Code Playgroud)
感谢@David Maze 的回答。
| 归档时间: |
|
| 查看次数: |
1519 次 |
| 最近记录: |