Je crée une application en natif réactif qui effectue des appels de récupération qui s'appuient sur les informations les plus récentes du serveur. J'ai remarqué qu'il semble mettre en cache la réponse et si je lance à nouveau cet appel de récupération, il renvoie la réponse en cache plutôt que les nouvelles informations de mon serveur.
Ma fonction est la suivante:
goToAll() {
AsyncStorage.getItem('FBId')
.then((value) => {
api.loadCurrentUser(value)
.then((res) => {
api.loadContent(res['RegisteredUser']['id'])
.then((res2) => {
console.log(res2);
this.props.navigator.Push({
component: ContentList,
title: 'All',
passProps: {
content: res2,
user: res['RegisteredUser']['id']
}
})
});
});
})
.catch((error) => {console.log(error);})
.done();
}
et la fonction de api.js im appel est la suivante:
loadContent(userid){
let url = `http://####.com/api/loadContent?User_id=${userid}`;
return fetch(url).then((response) => response.json());
}
Vous pouvez définir un Header
pour empêcher la mise en cache de la demande. Exemple ci-dessous:
return fetch(url, {
headers: {
'Cache-Control': 'no-cache'
}
}).then(function (res) {
return res.json();
}).catch(function(error) {
console.warn('Request Failed: ', error);
});
La réponse de Manosim n'a pas fonctionné pour moi, mais m'a mis sur la voie d'une solution qui ne fonctionne:
fetch(url, {
headers: {
'Cache-Control': 'no-cache, no-store, must-revalidate',
'Pragma': 'no-cache',
'Expires': 0
}
})
Cela l'a cloué.
J'ai eu un problème similaire avec react native (Android) et fetch en utilisant clojurescript (au lieu de js). L'ajout: le cache "no-store" (pas dans l'en-tête) a arrêté le comportement (mise en cache des données de récupération sur Android App).
Je pense que le code en js devrait être quelque chose comme:
fetch(url, {'cache':'no-store'})