我正在尝试实现一个graphQL API,它适用于查询,但并不能很好地实现突变:
下面是我使用apollo-client和graphql-tag进行的基本突变:
import gql from 'graphql-tag'
const addNewPlace = (place) => {
return client.mutate({
mutation: gql`
mutation {
addNewPlace(
input: {
$title: String!
}
) {
place { title }
}
}
`,
variables: {
title: place.title
}
})
}这里我试着用变量。当改变突变看起来像下面的那个,它是顺利地进行,然而,它不是正确的方式去做id。
const addNewPlace = (place) => {
return client.mutate({
mutation: gql`
mutation {
addNewPlace(
input: {
title: "${place.title}"
}
) {
place { title }
}
}
`
})
}知道我在哪里犯的错吗?
发布于 2017-07-16 18:10:30
在使用变量时,需要执行三个步骤:
variables的对象中指定一个mutate属性来完成。你写道:
变量:{ title: place.title }
这很好。我们将一些名为title的变量连同请求一起发送到我们的服务器。此时,GraphQL甚至不知道变量。请注意,不要将步骤2中的变量定义与步骤3中的输入定义混为一谈。另外,我假设您的typeDefs包含某种input类型,如AddNewPlaceInput。您可以传递这样的对象,而不仅仅是传递标题:
variables: { input: { title: place.title } }那么你的突变看起来是这样的:
mutation AddNewPlace($input: AddNewPlaceInput) {
addNewPlace(input: $input) {
# fields returned by the mutation我强烈推荐启用一个端点的,这样在客户端实现查询和突变之前,您可以很容易地测试它们。
最后,您可能需要检查并确保您在突变中要求的字段与您的类型定义相匹配。我只是在这里猜测,但是如果您的突变决定为Place类型,那么您就不需要将place { title }放在title中,除非您的Place类型实际上有一个place字段。
https://stackoverflow.com/questions/45130386
复制相似问题