最近在学习GraphQL,最常用的是Apollo client来配合React了,看文档使用useMutation可以有onCompleted参数,但是这样写的话是不会被执行的
const ADD_SONG = gql`
mutation AddSong($title:String!){
addSong(title:$title){
id,
title
}
}
`
const [addSong, data] = useMutation(ADD_SONG);
const onSubmit = (event) => {
event.preventDefault();
addSong({
variables: {title},
onCompleted: (data)=>{
console.log("OnCompleted:",data); ///will not working!
}
})
}
有两种方法解决
1.在定义勾子的时候设置:
const [addSong, data] = useMutation(ADD_SONG,{
onError:(error)=>{
console.log(error.graphQLErrors);
},
onCompleted: (data)=>{
console.log("OnCompleted:",data);
}
});
//下面直接传参数即可
addSong({
variables: {title}
})
2. 利用useMutation返回的Promise来处理。
addSong({
variables: {title}
}).then((data)=>{
console.log(data);
}).catch((error)=>{
console.log(error);
})
两种方法没有区别