uni-app项目 大部分是nvue页面
在一个request的全局拦截的地方,监听后台返回的code,根据code的值做退出登录,改变store里面用户信息的操作
js文件调用store.commit("RECORD_USER_INFO",{}),然后通过打印store.state.userInfo能够得到变化后的值
但是在nvue页面中通过mapState(["userInfo"])绑定的userInfo并没有实时更新,我用watch监听了userInfo,在handler也没发现变化。
同样的我在nvue页面中通过mapMutations(['RECORD_USER_INFO'])绑定,然后调用this.RECORD_USER_INFO({}),其他页面就能监听到这个变化。
这个是官方的bug吗?各位有没有合适的解决方案呢
config.js
import store from "@/store"
function loginOut (config) {
uni.removeStorageSync('token')
store.commit("RECORD_USER_INFO",{})
console.log(store.state.userInfo)
}
.nvue
import { mapState } from 'vuex';
computed: {
...mapState(['userInfo'])
},
watch:{
userInfo:{
deep:true,
handler:function(newval,oldVal){
console.log(newval,oldVal)
}
}
},
.nvue
import { mapMutations} from 'vuex';
methods: {
...mapMutations(["RECORD_USER_INFO"]),
loginOut(){
this.RECORD_USER_INFO({})
}
}
mutations.js
const mutaions = {
//用户信息
[RECORD_USER_INFO]: function(state, paylod) {
let _userInfo = {}
if(!paylod.user_id){
_userInfo = {
...paylod,
currency:1,
colorType:1,
currencyUnit:"USDT",
currencySymbol:"$"
}
}else{
_userInfo = {
...paylod,
currencyUnit:paylod.currency===2?'CNY':'USDT',
currencySymbol:paylod.currency===2?'¥':'$'
}
}
uni.setStorageSync('userInfo',_userInfo)
state.userInfo = _userInfo
console.log(state.userInfo)
},
}
1***@qq.com (作者)
没用这种方案了,用的storage,页面onshow的时候获取一次这个值
2020-06-04 20:33