更新帖子时,无法为要发送到后端的变量分配值。当我在解析器中console.log(args.data)
时,我得到[Object: null prototype] {}
。除了变量对象为null之外,我没有收到任何错误。
以下是前端编辑表单。默认值data.post
来自带有匹配帖子ID的查询,为简化起见,我对其进行了编辑。 variables
console.log显示所有内容都已正确分配,直到发送到后端为止。
const [title, setTitle] = useState('')
const formSubmit = useMutation(UPDATE_POST_MUTATION)
const variables = { title }
const onSubmitHandler = e => {
e.preventDefault()
try {
formSubmit({
variables: {
id: props.match.params.id,
data: { ...variables } // this shows all the appropriate input from the form
}
})
} catch(error) {
throw new Error(error)
}
props.history.push('/')
}
<form className='form' onSubmit={onSubmitHandler}>
<fieldset>
<div className="form-group">
<label htmlFor="title">Title</label>
<input
type="text"
className="form-control"
id="title"
placeholder="Enter title"
defaultValue={data.post.title}
onChange={e => setTitle(e.target.value)}
/>
</div>
<button type="submit" className="">
Save Changes
</button>
</fieldset>
</form>
以下是从前端开始的更新突变GraphQL:
export const UPDATE_POST_MUTATION = gql`
mutation UpdatePost($id: ID!, $title: string) {
updatePost(
id: $id,
data: {
title: $title
}
){
id
}
}
`
以下是我的schema.graphql:
type Mutation {
updatePost(id: ID!, data: UpdatePostInput!): Post!
}
最后,以下是我的解析器。以下代码中的console.log
显示为空:
async updatePost(parent, args, { prisma, request }, info){
console.log("args.data", args.data) // this shows [Object: null prototype] {}
const userId = getUserId(request)
const postExists = await prisma.exists.Post({
id: args.id,
author: {
id: userId
}
})
if (!postExists) {
throw new Error("Unable to update post")
}
const isPublished = await prisma.exists.Post({
id: args.id,
published: true
})
if(isPublished && args.data.published === false) {
await prisma.mutation.deleteManyReviews({
where: {
post: {
id: args.id
}
}
})
}
return prisma.mutation.updatePost({
where: {
id: args.id
},
data: args.data
})
},