使用 ApolloClient 将变量传递给 GraphQL 突变似乎不起作用

Posted

技术标签:

【中文标题】使用 ApolloClient 将变量传递给 GraphQL 突变似乎不起作用【英文标题】:Passing a variable to GraphQL mutation using ApolloClient doesn't seem to work 【发布时间】:2021-08-14 15:32:40 【问题描述】:

我正在尝试弄清楚如何使用 Apollo 客户端运行突变。

这是我正在尝试运行的突变:

export const CREATE_POST = gql`
    mutation CreatePost($title: String) 
      createPost(
        title: $title
        body: "Test body, whatever..."
      ) 
        title
        body
        slug
      
    
`

这是呈现表单的功能组件,并在我提交表单后尝试运行此突变:

export default function post() 
  const [createPost] = useMutation(CREATE_POST)

  async function handleSubmit(event) 
    event.preventDefault()
    const  data  = await createPost(
      variables:  title: "test title" 
    )
  

  return (<rendering the form here>)

我收到一个错误:

[GraphQL 错误]:消息:类型为“String”的变量“$title”用于预期类型“String!”的位置。

如果我从这里删除$title 变量:mutation CreatePost($title: String) ,错误就会消失。似乎我没有将变量传递给它。但据我所知,这部分代码是正确的:

    const  data  = await createPost(
      variables:  title: "test title" 
    )

这就是您应该将变量传递给突变的方式,对吧?我究竟做错了什么?我该如何调试?

组件的完整代码是here

查询码是here

【问题讨论】:

mutation CreatePost($title: String!) - 与突变 arg 相同的类型(在 API 中读取) @xadm 哦,这太完美了,非常感谢,你永远猜不到! 没什么好猜的,信息有误,解释了很多次 【参考方案1】:

感谢@xadm。

必须使用mutation CreatePost($title: String!) 而不是mutation CreatePost($title: String)

【讨论】:

以上是关于使用 ApolloClient 将变量传递给 GraphQL 突变似乎不起作用的主要内容,如果未能解决你的问题,请参考以下文章

如何将一个组件中查询的数据传递给另一个组件以用作查询变量?

ApolloClient 客户端的类型

使用 Ajax 方法将变量传递给 python

如何将变量传递给评估函数?

将变量传递给函数\使用该变量返回一个新值\重复直到值达到 0

如何使用'for'循环将新变量传递给python脚本