GOOGLE ADS

Mittwoch, 13. April 2022

onCompleted Callback ruft nicht nach zweitem Aufruf in useLazyQuery Hook Apollo Client (React)

Ich verwende den Apollo-Client, um auf Graphql-Abfragen zu reagieren. Jetzt habe ich ein Problem, dass, während ich useLazyQuery-Hook verwende, um programmgesteuert abzufragen, aber onCompleted-Rückruf nicht ausgelöst wird, wenn ich zum zweiten Mal abfrage, ob die Netzwerkanforderung tatsächlich abgeschlossen ist und der Status im 1-Index des Rückgabewerts dieses Hooks wird aktualisiert

const [getUser, getUserStatus] = useLazyQuery(GET_USER, {
fetchPolicy: 'no-cache',
notifyOnNetworkStatusChange: true,
// this callback is not triggering 2nd call of getUser
onCompleted: (data) => {
const { customerCart, customer } = data;
if (!id) {
dispatch(updateCartId(customerCart.id));
}
if (id!== customerCart.id) {
mergeCart({
variables: { cartId: id, cartIdToMerge: customerCart.id },
});
}
dispatch(updateUser(customer));
},
onError: (error) => {
checkHasAuth(error);
},
});
useEffect(() => {
if (token) {
// here i am calling first and 2nd time
getUser();
}
}, [getUser, token]);


Lösung des Problems

Es scheint ein bekanntes Problem zu sein, dass die onCompletedOption von Apollo zwischen Abfragen, die über das Netzwerk und durch den Cache ausgeführt werden, unterschiedlich funktioniert. Wenn die Anfrage aus dem Cache erfüllt werden kann, dann onCompletedwird nicht aufgerufen, wohingegen wenn die Anfrage über das Netzwerk über den Server erfüllt wird, dann aufgerufen onCompleted wird.

Sie können fetchPolicyin den Optionen, an die Sie übergeben, festlegen, dass der Cache umgangen wird, wenn Sie die Ausführung des Rückrufs useLazyQueryerzwingen möchten:onCompleted

const [loadData] = useLazyQuery(QUERY, {fetchPolicy: 'network-only', onCompleted:...})

Github-Problem: https://github.com/apollographql/apollo-client/issues/9338

Apollo-Dokumentation für fetchPolicy-Optionen: https://www.apollographql.com/docs/react/data/queries/#setting-a-fetch-policy

Keine Kommentare:

Kommentar veröffentlichen

Warum werden SCHED_FIFO-Threads derselben physischen CPU zugewiesen, obwohl CPUs im Leerlauf verfügbar sind?

Lösung des Problems Wenn ich das richtig verstehe, versuchen Sie, SCHED_FIFO mit aktiviertem Hyperthreading ("HT") zu verwenden, ...