vue.js

关注公众号 jb51net

关闭
首页 > 网络编程 > JavaScript > javascript类库 > vue.js > 使用keep-alive时数据无法刷新问题

使用keep-alive时,数据无法刷新的问题及解决

作者:碎碎。

这篇文章主要介绍了使用keep-alive时,数据无法刷新的问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

使用keep-alive时,数据无法刷新问题

keep-alive 相关内容

概念: <keep-alive> 是Vue的一个内部组件,适合用来缓存不需要实时更新的组件,这样可以保留组件状态避免重新渲染。

Props:

问题:在需要重新请求数据的时候,依然走的缓存

案例中的部分源码:

问题描述:这个项目是一个后台管理系统,由于很多组件都有走缓存的原因,导致在更换账户之后,数据依然走的缓存,并没有加载新的数据,从而账户虽然已经更换,但是现实的内容还是上一个账户下的内容,这时候在network也会发现,除了之前请求的数据,就没有新数据请求的记录了

解决方案:

方案1: 如果要在进入页面的时候获取最新的数据,需要在activated阶段获取数据,承担原来created钩子中获取数据的任务(亲测,时而有效,时而无效,不知道是什么原因)。

方案2: 在账户登录之后调用 **window.location.reload() **,起到重新请求的作用(已亲测)

方案3: 在vuex中设置状态,动态绑定 include 值,在登录的时候缓存需要缓存的组件,在退出的时候,清除需要刷新的组件(效果很理想,也顺带解决了加载数据时,数据闪现的情况)

//--------------------- VUEX ----------------------------
const state = {
  keepAliveList: 'login,index,productionList,characterList,dynamicList,QAList,fansList'// 需要缓存的页面
}
const mutations = {
  KeepAliveListState (state) {
    state.keepAliveList = 'login,index,productionList,characterList,dynamicList,QAList,fansList'
  },
  removeAliveList (state) {
    state.keepAliveList = 'index'
  }
}
const getters = {
  keepAliveListState (state) {
    return state.keepAliveList
  }
}
export default new Vuex.Store({
  state,
  mutations,
  getters
})
//--------------------- 在app中统一监控----------------
computed: {
    keepAliveList () {
      if (this.$store.getters.keepAliveListState) {
        return this.$store.getters.keepAliveListState
      }
    }
  },
  //--------------------- 在退出的时候,提交removeAliveList ---------------
  this.$store.commit('removeAliveList')
  //--------------------- 在登录的时候,提交KeepAliveListState ---------------
  this.$store.commit('KeepAliveListState')

keep-alive数据刷新问题

有时候实时数据需要刷新但由于缓存会显示之前的数据 用户点击之后会报错:

处理方式如下

(1)在vuex中设置状态,动态绑定 include 值,在登录的时候缓存需要缓存的组件,在退出的时候,清除需要刷新的组件(效果很理想,也顺带解决了加载数据时,数据闪现的情况) 或者exclude写入不缓存的

(2)放在actived中获取数据

(3)

tips:

beforeRouteEnter --> created --> mounted --> activated --> deactivated

再次进入缓存的页面,只会触发beforeRouteEnter -->activated --> deactivated 。created和mounted不会再执行。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文