【发布时间】:2020-05-02 20:12:02
【问题描述】:
目标是从 Firebase 验证用户并使用 Vuex 存储状态,当应用程序打开时,我使用状态来了解用户是否已登录,并将其用于更多操作。
我需要一个状态来填充 App.vue 文件上data() 方法的变量,但它显然没有得到正确的引用。加载页面时出现以下错误:
[Vue warn]: Error in data(): "TypeError: this.$state is undefined"
found in
---> <App> at src/App.vue
<Root>
和
[Vue warn]: Property or method "isLoggedIn" is not defined on the instance but referenced during render. Make sure that this property is reactive, either in the data option, or for class-based components, by initializing the property. See: https://vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties.
found in
---> <App> at src/App.vue
<Root>
App.vue
<template>
<v-app>
<router-view v-if="isLoggedIn"></router-view>
<login v-else />
</v-app>
</template>
<script>
import login from "@/views/Login";
export default {
name: "App",
components: {
login
},
data() {
return {
isLoggedIn: this.$state.getters.user != null
};
}
};
</script>
<style>
</style>
store/index.js
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
export default new Vuex.Store({
state: {
user: null,
status: null,
error: null
},
mutations: {
setUser(state, payload) {
this.user = payload
},
removeUser(state) {
this.user = null
},
setStatus(state, payload) {
this.status = payload
},
setError(state, payload) {
this.error = payload
}
},
actions: {
setUserAction({ commit }, payload) {
commit('setUser', payload)
commit('setStatus', 'success')
commit('setError', null)
}
},
modules: {
},
getters: {
status(state) {
return state.status
},
user(state) {
return state.user
},
error(state) {
return state.error
}
}
})
【问题讨论】:
-
你的意思是
this.$store而不是this.$state? -
是的@skirtle,它奏效了。但是
上没有加载新页面 -
如果您希望它在
state.user更改时更新,您应该使用computed属性而不是data属性。 -
我改成了
computed: { checkIsLoggedIn() { console.log(this.$store.getters.user); return this.$store.getters.user != null; } }和<router-view v-if="checkIsLoggedIn"></router-view>。但不起作用 -
@Augusto by "not works",现在的错误是什么?它应该从“类型错误,此状态未定义”更改
标签: javascript vue.js vuex