在真机调试时,HBuilder X 的热更新机制会重新加载页面,导致 Vuex 状态被重置。这是因为热更新只替换了修改的模块,但 Vuex 的状态是存储在内存中的,重新加载页面时内存状态会丢失。
解决方案:
- 使用持久化存储:结合
uni.setStorageSync 在 Vuex 的 mutation 中同步保存状态,并在应用启动时恢复状态。
- 避免依赖内存状态:对于需要持久化的数据,直接使用
uni.setStorageSync 存储,而不是依赖 Vuex。
- 监听热更新事件:在
App.vue 的 onShow 中监听热更新,并在更新后手动恢复 Vuex 状态。
示例代码(Vuex 持久化):
// store.js
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
const store = new Vuex.Store({
state: {
userInfo: uni.getStorageSync('userInfo') || {}
},
mutations: {
setUserInfo(state, payload) {
state.userInfo = payload
uni.setStorageSync('userInfo', payload)
}
}
})