Vuex持久化

使用插件让在vuex中管理的状态数据自动同时存储在本地免去自己存储的环节

1安装vuex-persistedstate插件

npm i vuex-persistedstate

2.vuex中准备要存储的数据

例如:

src/store 文件夹下新建 modules 文件,在 modules 下新建 user.jscart.js

// 用户状态
export default {
  namespaced: true,
  state: () => {
    return {
      profile: {
        id: '',
        nickname: '',
        avatar: '',
        token: '',
        mobile: ''
      }
    }
  }
}
// 购物车状态
export default {
  namespaced: true,
  state: () => {
    return {
      list: []
    }
  }
}

3在store下的index中导入

import { createStore } from 'vuex'

import user from './modules/user'
import cart from './modules/cart'

export default createStore({
  modules: {
    user,
    cart
  }
})

4使用vuex-persistedstate插件来进行持久化

import { createStore } from 'vuex'
import createPersistedstate from 'vuex-persistedstate'

import user from './modules/user'
import cart from './modules/cart'

export default createStore({
  modules: {
    user,
    cart
  },
  plugins: [
    createPersistedstate({
      key: 'erabbit-client-pc-store',
      paths: ['user', 'cart']
    })
  ]
})

说明

  1. 默认是存储在localStorage中

  2. key是存储数据的键名

  3. paths是存储state中的那些数据,如果是模块下具体的数据需要加上模块名称,如user.token

  4. 修改state后触发才可以看到本地存储数据的的变化

 

 

 

 

 

 

手动保存token和vuex中的数据

// 封装本地存储,以后改的话,直接在这边改
// 取值
export const getStorage = key => localStorage.getItem(key)
// 赋值
export const setStorage = (key, value) => localStorage.setItem(key, value)
// 清空
export const clearStorage = () => localStorage.clear()
// 移除
export const removeStorage = key => localStorage.removeItem(key)

export default {
  getStorage,
  setStorage,
  clearStorage,
  removeStorage
}
// vuex的变量
import { setStorage, getStorage } from '../utils/storage'
export default {
  // 开启命名空间
  namespaced: true,
  state () {
    return {
      token: getStorage('token'),
      refresh_token: getStorage('refresh_token'),
      user: {}, // 用户基本资料
      userProfile: {} // 用户的简介
    }
  },
  mutations: {
    setRefreshToken (state, refreshToken) {
      state.refresh_token = refreshToken
      // 给vuex存token值的时候,随便给本地存一份
      setStorage('refresh_token', refreshToken)
    },
    setToken (state, token) {
      state.token = token
      // 给vuex存token值的时候,随便给本地存一份
      setStorage('token', token)
    },
    setUser (state, payload) {
      state.user = payload
    },
    setuserProfile (state, payload) {
      state.userProfile = payload
    },
    clearUser (state) {
      state.token = ''
      state.refresh_token = ''
      state.user = {}
      state.userProfile = {}
    }
  }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值