列表页套了 keep-alive,用户切到详情改完数据再回来,还是十分钟前的旧列表,手动刷新才更新。日志里能对上时间点,这种反而好排。

keep-alive 保留的是组件实例,activated 钩子里没有重新拉数据,页面上挂的还是第一次渲染的结果。缓存命中时不走 mounted,刷新逻辑等于没执行。这一点先确认清楚,后面就不用反复试。

onActivated(() => {
  if (Date.now() - loadedAt > 60_000) fetchList()
})

「keep-alive 数据不更新」改完先别急着全量,挑一台机器放半天,真有问题这段时间就能看出来。线上出问题先对时间点,跟发布、备份、任务执行的时刻排一排,能省掉一半功夫。

日志级别临时调高可以,记得改回去,长期开着既占磁盘又掩盖真问题。权限不要一口气开到最大,先加到够用再往上试,范围小才好收。

处理上按这个顺序:在 activated 里判断数据是否过期,超过设定时间就重新请求;要强制更新就调 provide 出去的刷新方法,别整页 reload;详情页改动用 store 通知列表,把它标记成脏数据。

结果对不对很好判断,详情改完返回列表,新数据直接出现在第一行,不用手动刷新。

作者 9823189