Vuex - 持久化
在开发的过程中,像用户信息(名字,头像,token)需要vuex中存储且需要本地存储,再例如,购物车如果需要未登录状态下也支持,如果管理在vuex中页需要存储在本地
任务目标:
使用插件帮助我们自动把vuex的数据同步到本地进行持久化缓存
实现步骤
- 安装
vuex-persistedstate
插件 - vuex中准备
user模块
和cart模块
- 将插件配置到vuex的
plugins
选项中,配置user模块和cart模块进行状态持久化 - 修改state数据就会触发自动同步机制,修改一下数据检测是否同步成功
代码落地
1)安装一个vuex的插件vuex-persistedstate
来支持vuex的状态持久化
npm i vuex-persistedstate --save
或者
yarn add vuex-persistedstate
2)在src/store
文件夹下新建 modules
文件,在 modules
下新建 user.js
和 cart.js
src/store/modules/user.js
// 用户状态
export default {
namespaced: true,
state: () => ({
id: '',
nickname: '',
avatar: '',
token: '',
mobile: ''
})
}
src/store/modules/cart.js
// 购物车状态
export default {
namespaced: true,
state: () => ({
list:[]
})
}
3)在 src/store/index.js
中导入 user 和 cart 模块
import { createStore } from 'vuex'
import user from './modules/user'
import cart from './modules/cart'
export default createStore({
namespaced: true,
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']
})
]
})
插件说明
-
默认是存储在
localStorage
中,可以对存储的方法进行自定义 -
key是存储数据的键名
-
paths是存储state中的那些数据,如果是模块下具体的数据需要加上模块名称,如
user.token
-
修改state中的数据即可触发同步机制,可以看到本地存储数据的的变化
测试效果
user模块定义一个mutation在main.js去调用下,观察浏览器application的localStorage下是否已经有了数据
src/store/modules/user.js
// 测试代码
mutations: {
setUser (state) {
state.id = 10001
}
}
src/main.js
store.commit('user/setUser')