当前位置: 首页 > 工具软件 > store.js > 使用案例 >

vue 在js 文件中使用store_uni-app js文件调用store.commit,在vue页面中mapState未更新

唐海阳
2023-12-01

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)

},

}

 类似资料: