原因:
Vuex 数据丢失通常发生在用户刷新浏览器页面时。因为 Vuex 的状态保存在浏览器的内存中,当页面刷新时,页面会重新加载,内存中的状态会丢失。
解决方案:
1.使用 localStorage 或 sessionStorage 来在页面加载时重新将 Vuex 状态恢复到内存中。
2.在 Vuex store 中添加 plugins 选项,使用插件机制在每次 mutation 后将状态保存到 localStorage 或 sessionStorage。
以下是一个简单的 Vuex 插件示例,用于在每次 mutation 后保存状态:
const storagePlugin = store => {
store.subscribe((mutation, state) => {
// 将状态保存到 localStorage
localStorage.setItem('myVuexState', JSON.stringify(state));
});
};
const store = new Vuex.Store({
// ...
plugins: [storagePlugin]
});
在页面加载时,可以通过检查 localStorage 来尝试恢复状态:
// 在 store 初始化之前
const initialState = localStorage.getItem('myVuexState');
if (initialState) {
store.replaceState(JSON.parse(initialState));
}
const store = new Vuex.Store({
// ...
plugins: [storagePlugin],
// 初始状态
state: initialState ? JSON.parse(initialState) : {}
});
请注意,使用 localStorage 可以在用户关闭页面后继续保留状态,而 sessionStorage 仅在当前会话中保存状态。根据需求选择合适的存储方式。