"OnCompleted" 在 useMutation 中使用 "refetchQueries" 时对 useQuery 不起作用,如何解决?
"OnCompleted" does not work for useQuery when using "refetchQueries" in useMutation, how to fix it?
使用useMutation时,我添加了refetchQueries来获取修改后的数据。
let [saveTemplate, { loading}] = useMutation(gql`
${templateFragment}
mutation saveTemplate ($template:saveTemplateTemplatesType!,$token:String!){
saveTemplate(template:$template,token:$token){
...template
}
}
`,{refetchQueries:["getUserData"],onError:()=>{message.warn("error")},onCompleted:()=>{console.log("success")}});
向服务器发出变更请求。数据返回了,但是useQueries的onCompleted没有生效
let { loading } = useQuery(
gql`
${templateFragment}
query getUserData($userToken: String) {
getUsersData(userToken: $userToken) {
templates {
...template
}
token
}
}
`,
{
variables: {
userToken: userToken ? userToken.replace(/"/g, ``) : null,
},
onCompleted: (data) => {
props.isAuthAC(
true,
data.getUsersData.templates,
data.getUsersData.token
);
},
onError: () => console.log("err"),
}
);
在 github 上找到了解决方案。您需要添加到 useQuery: notifyOnNetworkStatusChange: true.
let { loading } = useQuery(
gql`
${templateFragment}
query getUserData($userToken: String) {
getUsersData(userToken: $userToken) {
templates {
...template
}
token
}
}
`,
{
variables: {
userToken: userToken ? userToken.replace(/"/g, ``) : null,
},
notifyOnNetworkStatusChange: true,
onCompleted: (data) => {
props.isAuthAC(
true,
data.getUsersData.templates,
data.getUsersData.token
);
},
onError: () => console.log("err"),
}
);
使用useMutation时,我添加了refetchQueries来获取修改后的数据。
let [saveTemplate, { loading}] = useMutation(gql`
${templateFragment}
mutation saveTemplate ($template:saveTemplateTemplatesType!,$token:String!){
saveTemplate(template:$template,token:$token){
...template
}
}
`,{refetchQueries:["getUserData"],onError:()=>{message.warn("error")},onCompleted:()=>{console.log("success")}});
向服务器发出变更请求。数据返回了,但是useQueries的onCompleted没有生效
let { loading } = useQuery(
gql`
${templateFragment}
query getUserData($userToken: String) {
getUsersData(userToken: $userToken) {
templates {
...template
}
token
}
}
`,
{
variables: {
userToken: userToken ? userToken.replace(/"/g, ``) : null,
},
onCompleted: (data) => {
props.isAuthAC(
true,
data.getUsersData.templates,
data.getUsersData.token
);
},
onError: () => console.log("err"),
}
);
在 github 上找到了解决方案。您需要添加到 useQuery: notifyOnNetworkStatusChange: true.
let { loading } = useQuery(
gql`
${templateFragment}
query getUserData($userToken: String) {
getUsersData(userToken: $userToken) {
templates {
...template
}
token
}
}
`,
{
variables: {
userToken: userToken ? userToken.replace(/"/g, ``) : null,
},
notifyOnNetworkStatusChange: true,
onCompleted: (data) => {
props.isAuthAC(
true,
data.getUsersData.templates,
data.getUsersData.token
);
},
onError: () => console.log("err"),
}
);