我有一个持有用户ID的Vuex状态。在我组件的mounted()
中,我尝试使用该用户ID,但始终为null
。
如何将状态从计算出的mapGetters
转移到mounted()
中?
这是我的computed
:
computed: {
...mapGetters('auth', [
'userid'
])
}
这是我的mounted()
:
mounted () {
HTTP.get('account/' + this.userid + '/')
.then((response) => {
this.account = response.data
})
}
this.userid
始终为null
。
顺便说一句,当我查看Vue检查器时,auth/userid
在getter auth/userid
中具有正确的值。如何从auth.userid
访问mounted()
?
答案 0 :(得分:0)
调试
要调试此功能,请先跳过mapGetters
,甚至跳过getters
,然后直接返回状态。
例如。
computed:{
userId() { return this.$store.state.auth.userid }
}
我不知道您的商店或模块的设置方式,因此您可能需要稍作更改。
一旦可行,将其添加到您的吸气剂中,并使用this.$store.getters.userid
等。
最后,在可行时,请尝试使用原始的mapGetters并仔细检查模块别名。
可能的异步问题
另一方面,现在,如果您的getter是async
,则在用户ID承诺解析之前,您还将获得null。您将必须使用asyncComputed,或等待装入结果。
答案 1 :(得分:0)
userid
在安装组件时可能不可用。您可以通过观察userid
的值来修复它,并且仅在userid
更改并可用时才调用HTTP请求:
computed: {
...mapGetters('auth', [
'userid'
])
},
watch: {
'userid': {
handler (newVal) {
if (newVal) { // check if userid is available
this.getAccountInformation()
}
},
immediate: true // make this watch function is called when component created
}
},
methods: {
getAccountInformation () {
HTTP.get('account/' + this.userid + '/')
.then((response) => {
this.account = response.data
})
}
}