状态持久化

104 阅读1分钟

为什么说刷新页面vuex的数据会丢失

刷新页面vuex的数据会丢失属于正常现象,因为JS的数据都是保存在浏览器的堆栈内存里面的,刷新浏览器页面,以前堆栈申请的内存被释放,这就是浏览器的运行机制,那么堆栈里的数据自然就清空了。

第一种方法用sessionStorage

将 数据保存在vuex的store里,也将这些信息也保存在sessionStorage里。注意的是vuex中的变量是响应式的,而sessionStorage不是,当你改变vuex中的状态,组件会检测到改变,而sessionStorage就不会了,页面要重新刷新才可以看到改变,所以应让vuex中的状态从sessionStorage中得到,这样组件就可以响应式的变化。

这里还可以用 localStorage,但是它没有期限;所以常用的还是sessionStorage,当浏览器关闭时会话结束。

const state = {
  name: JSON.parse(sessionStorage.getItem("state_app_name")) || {}, 
}
const mutations = {
  SET_Name: (state, payload) => {
    state.name = payload.name
    sessionStorage.setItem("state_app_name", JSON.stringify(payload.name))
  }
}
const actions = {
  setName({ commit }, payload) {
    commit('SET_Name', payload)
  }
}

export default {
  namespaced: true,//命名空间namespaced:true
  state,
  mutations,
  actions
}

vuex-along

vuex-persistedstate

vuex-persist

以上三种 插件 也是可以达到效果的 其原理都是存入到 sessionStorage或者 localStorage 中,通过配置实现,灵活性会高一点