React Native - 获取调用缓存
React Native - Fetch call cached
我正在用 React Native 构建一个应用程序,它会根据来自服务器的最新信息进行提取调用。我注意到它似乎缓存了响应,如果我 运行 再次调用它 returns 缓存的响应而不是来自我的服务器的新信息。
我的函数如下:
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();
}
我调用的api.js函数如下:
loadContent(userid){
let url = `http://####.com/api/loadContent?User_id=${userid}`;
return fetch(url).then((response) => response.json());
}
您可以设置一个Header
来防止请求被缓存。
示例如下:
return fetch(url, {
headers: {
'Cache-Control': 'no-cache'
}
}).then(function (res) {
return res.json();
}).catch(function(error) {
console.warn('Request Failed: ', error);
});
Manosim 的回答对我没有用,但让我找到了 可行的解决方案:
fetch(url, {
headers: {
'Cache-Control': 'no-cache, no-store, must-revalidate',
'Pragma': 'no-cache',
'Expires': 0
}
})
这很成功。
我在使用 react native (Android) 和使用 clojurescript(而不是 js)获取时遇到了类似的问题。
添加 :cache "no-store"(不在 header 中)停止了行为(在 Android App 上缓存获取数据)。
我觉得js中的代码应该是这样的:
fetch(url, {'cache':'no-store'})
我正在用 React Native 构建一个应用程序,它会根据来自服务器的最新信息进行提取调用。我注意到它似乎缓存了响应,如果我 运行 再次调用它 returns 缓存的响应而不是来自我的服务器的新信息。
我的函数如下:
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();
}
我调用的api.js函数如下:
loadContent(userid){
let url = `http://####.com/api/loadContent?User_id=${userid}`;
return fetch(url).then((response) => response.json());
}
您可以设置一个Header
来防止请求被缓存。
示例如下:
return fetch(url, {
headers: {
'Cache-Control': 'no-cache'
}
}).then(function (res) {
return res.json();
}).catch(function(error) {
console.warn('Request Failed: ', error);
});
Manosim 的回答对我没有用,但让我找到了 可行的解决方案:
fetch(url, {
headers: {
'Cache-Control': 'no-cache, no-store, must-revalidate',
'Pragma': 'no-cache',
'Expires': 0
}
})
这很成功。
我在使用 react native (Android) 和使用 clojurescript(而不是 js)获取时遇到了类似的问题。 添加 :cache "no-store"(不在 header 中)停止了行为(在 Android App 上缓存获取数据)。
我觉得js中的代码应该是这样的:
fetch(url, {'cache':'no-store'})