我正在尝试离线支持我的应用程序,所以我想做的逻辑是首先检查是否有cachedfeeds数据,如果有,那么它将setFeeds到该数据,该数据将从缓存中显示,但它也会获取API并获取新数据,在从API获取新数据后,它会从存储中删除旧的cachedfeeds数据并替换为新数据
如果用户第一次打开应用程序并且没有feedcached,则它通常会将API获取的数据提供给用户,
目前,我的代码没有替换新的API数据,以feedcached数据我得到相同的数据一次又一次地从缓存时,我记录storedData我如何解决这个问题?
const [feeds, setFeeds] = useState([]);
const [page, setPage] = useState(1);
const [cached, setCached] = useState(false);
const fetchallfeeds = async () => {
try {
if (!cached) {
const storedData = storage.getString('cachedfeeds')
if (storedData) {
console.log(storedData)
console.log('Fetching data from cache...');
setFeeds(JSON.parse(storedData));
setCached(true);
}
}
const response = await fetch(`http://localhost:3000/feeds/${page}`);
const data = await response.json()
console.log('Fetching data from API...');
if (cached) {
await storage.delete('cachedfeeds')
}
await storage.set('cachedfeeds', JSON.stringify(data));
setFeeds(prevPosts => [...prevPosts, ...data])
} catch (error) {
console.log(error)
}
}
useEffect(() => {
fetchallfeeds()
}, [page, cached])
1条答案
按热度按时间ct2axkht1#
只要缓存的值发生变化,就会调用fetchallfeeds,这就是我无限循环的原因