列表滚动后数据错乱,怎么正确缓存组件状态?
我在用 Vue 做一个带 tabs 的长列表页面,每个 tab 切换时会加载不同的数据。但用 <keep-alive> 包裹后,滚动位置和输入框内容在切换 tab 时会互相串掉,比如 A 列表滚到一半,切到 B 再回来,A 的滚动位置还在但数据却变成 B 的了。
我试过给每个列表组件加唯一的 key,也试过在 activated 里手动 restore 滚动位置,但状态还是混乱。是不是 <keep-alive> 的 include 配置没写对?
<keep-alive :include="cachedViews">
<router-view />
</keep-alive>
你可以尝试在 deactivated 钩子里保存当前组件的状态,比如滚动位置和输入框内容,然后在 activated 里恢复这些状态。这里有一个简单的示例:
记得把
.your-list-class和.your-input-class替换成你实际的类名或者选择器。这样可以确保每次激活和停用组件时,都能正确地保存和恢复状态。如果还是有问题,可能需要检查一下 cachedViews 的配置,确保它包含了正确的组件名称。