美文网首页
Vuex数据持久化

Vuex数据持久化

作者: 向艳蓉 | 来源:发表于2018-11-14 15:59 被阅读0次

    使用Vuex时发现页面刷新以后Vuex里面存储的state数据会丢失,因为我们的state都是存储在内存中的。
    解决办法就是将Vuex中的数据存储在本地localStorage中。
    1、在mutations中将数据同步保存到localStorage中

    SET_USERINFO: (state, userInfo) => {
          state.userInfo = userInfo
          localStorage.setItem('userInfo', JSON.stringify(state.userInfo))
        }
    

    2、在actions取数据时从localStorage取出数据,存入Vuex保证同步

        // 获取用户信息
        GetUserInfo({ commit, state }) {
          // 防止页面刷新vuex中的数据丢失
          for (var item in state) {
            localStorage.getItem(item) ? state[item] = JSON.parse(localStorage.getItem(item)) : false
          }
          return new Promise((resolve, reject) => {
            getUserInfo({ token: state.token, userCode: state.userInfo.userCode }).then(response => {
              if (!response.data) { // 由于mockjs 不支持自定义状态码只能这样hack
                reject('error')
              }
              const data = response.data
              if (data.user) {
                commit('SET_USERINFO', data.user)
              }
              resolve(response)
            }).catch(error => {
              reject(error)
            })
          })
        },
    

    3、退出登录时同步移除localStorage中的数据

    // 登出
        LogOut({ commit, state }) {
          return new Promise((resolve, reject) => {
            logout(state.token).then(() => {
              commit('SET_USERINFO', {})
              for (var item in state) {
                localStorage.removeItem(item)
              }
              resolve()
            }).catch(error => {
              reject(error)
            })
          })
        },
    

    相关文章

      网友评论

          本文标题:Vuex数据持久化

          本文链接:https://www.haomeiwen.com/subject/ekjjfqtx.html