Когда я обновляю сообщение, я не могу присвоить значения переменным, которые будут отправлены на сервер. Когда я console.log(args.data)
в резольвере, я получаю [Object: null prototype] {}
. Я не получаю ошибок, за исключением того, что переменная объект является нулевым.
Ниже приведена форма редактирования внешнего интерфейса. Значения по умолчанию data.post
взяты из запроса с соответствующим идентификатором записи, который я отредактировал для простоты. 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
})
},