效果
- 点击第5周。缓存第5周数据,并预加载第4、6周数据。
- 继续点击第6周,读取第6周缓存数据,第5周数据已缓存,所以只预加载第7周数据。
- 点击第1周。缓存第1周,预加载第2周,第0周不加载。
代码
<script>
export default {
data() {
return {
dataInit: false
}
},
methods: {
loadData(week = '', onlyCache = false) {
const isFirstLoad = !this.dataInit
const params = { week: 10 }
Api.getData({
...params
}).then((res) => {
const data = res.data
this.renderPage(data, isFirstLoad, onlyCache)
})
},
renderPage(pageData, isFirstLoad = false, onlyCache = false) {
this.asyncCache(pageData, onlyCache)
if (onlyCache) return
}
},
asyncCache(pageData, onlyCache) {
const week = pageData.weeks
const cacheData = sessionStorage.getItem(`${FETUS_PAGE_CACHE}${week}`)
if (!!cacheData) {
console.log(`${week}周已缓存`)
} else {
console.log(`缓存${week}周数据`)
sessionStorage.setItem(`${FETUS_PAGE_CACHE}${week}`, JSON.stringify(pageData))
}
if (week < 41 && !onlyCache) {
const cacheData = sessionStorage.getItem(`${FETUS_PAGE_CACHE}${week + 1}`)
if (!!cacheData) {
console.log(`${week + 1}周已缓存`)
} else {
this.loadData(week + 1, true)
}
}
if (week > 2 && !onlyCache) {
const cacheData = sessionStorage.getItem(`${FETUS_PAGE_CACHE}${week - 1}`)
if (!!cacheData) {
console.log(`${week - 1}周已缓存`)
} else {
this.loadData(week - 1, true)
}
}
}
}
</script>