uni-app开发小程序中不支持使用keep-alive,所以要使用v-show+v-if模拟来模拟v-show的效果(为什么要这样用,是因为之前tab中加载过的分页数据希望缓存下来,不希望又去加载一遍),所有便有了如下一些问题待解决
1.如何把每个tabs列表中分页的数据保存下来,答案(建立一个响应式的数组对象,将当前页,每页数量,是否加载完毕,是否已经渲染过等,list等数据存起来)
2.具体是如何模拟keep-alive功能的,使用v-for循环响应式数组对象,并且在这个标签上加上v-show去控制当前列表的显示隐藏(做缓存),然后在子标签中放置当前列表组件(使用v-if),保证第一次加载走请求
3.技巧将当前的配置对象使用计算属性计算,还有注意当前tabs类型的列表中是否有还有下一页,如果没有的话,向下滚动变不再需要加载第一页(减少无用请求),注意一点你希望保持 scrollTop 的值在切换 tabs 时不变,你可能需要采取一些额外的措施,因为 Vue 的响应式系统不会自动跟踪和恢复 scrollTop 的值。以下是一些可能的解决方案:scrollTop不会被保存,也需要存在上面响应式响应式数组对象上
const feedTab = computed(() => feedTabs.value[tabIndex.value])
何时去更改当前tabs的标签页
async function onFeedTabChange({ index }) {
tabIndex.value = index
if (!feedTab.value.rendered) {
loadList()
}
feedTab.value.rendered = true
await nextTick()
curScrollTop.value = feedTab.value.scrollTop
}
简易版本
