React中setInterval定期获取API数据始终返回旧值问题求助
解决fetch请求重复返回旧数据的问题
这是浏览器缓存GET请求导致的。你的请求URL固定,浏览器会默认缓存GET请求的响应,所以每次调用fetch时,其实并没有真正向服务器发起新请求,而是直接复用了之前缓存的结果,因此打印的始终是相同的数据。
两种有效解决办法:
- 给URL添加唯一参数绕过缓存
修改fetch的URL,在末尾拼接当前时间戳或随机数,让每次请求的URL都不一样:
getData = async () => { const fetchData = await fetch(`JSON-url?timestamp=${Date.now()}`); const resp = await fetchData.json(); const timeStampData = resp.timestamp; // 这里无需await,resp.timestamp是普通属性,不是Promise console.log(timeStampData); };
- 通过请求头禁用缓存
在fetch的配置中添加缓存控制的请求头,强制浏览器不使用缓存:
getData = async () => { const fetchData = await fetch("JSON-url", { headers: { 'Cache-Control': 'no-cache, no-store, must-revalidate', 'Pragma': 'no-cache', 'Expires': '0' } }); const resp = await fetchData.json(); const timeStampData = resp.timestamp; console.log(timeStampData); };
另外你尝试把const改成let的做法完全没用,变量声明方式和浏览器的请求缓存机制没有任何关联,这个方向不对。
内容的提问来源于stack exchange,提问作者Try Raisins
相关产品推荐
相关产品推荐

