Vuex无法读取未定义的属性

Posted

技术标签:

【中文标题】Vuex无法读取未定义的属性【英文标题】:Vuex Cannot read property of undefined 【发布时间】:2018-04-21 18:24:25 【问题描述】:

我正在尝试使用 Vuex 处理全局变量,但即使我使用 Vue.use(); 初始化 Vuex,我也会不断收到 undefined 错误。

TypeError: Cannot read property 'isAuth' of undefined

store.js:

import Vue from 'vue';
import Vuex from 'vuex';

Vue.use(Vuex);

export default new Vuex.Store(
  isAuth: true,
);

main.js:

import store from './store/store';
....
new Vue(
  el: '#app',
  store,
  router,
  render: h => h(App),
.......

我调用isAuth 来查看它的值,如下所示:this.$store.isAuth;,这会导致undefined 错误。

我确实在store.js 中初始化了Vuex,但仍然出现undefined 错误。有什么我遗漏的吗?

【问题讨论】:

【参考方案1】:

猜测一下,这可能适用于您当前正在做的事情:this.$store.state.isAuth,但我会像下面那样做。

我没有像你以前那样使用商店,但在使用模块时没有遇到问题,试试这样:

// authModule.js
const state = 
    isAuth: true


const getters = 
    getIsAuth (state) 
        return state.isAuth
    


export default 
    state,
    getters

然后像这样注册:

import authModule from './modules/authModule'
export default new Vuex.Store(
    modules: 
        authModule
    
)

然后在你的 vue 实例上:

import mapGetters from 'vuex'

computed: 
    ...mapGetters(
        isAuth: 'getIsAuth'
    )

您现在可以通过this.isAuth 访问。您也可以访问:this.$store.state.authModule.isAuth

根据他们的文档,这实际上是最佳实践,因为当项目变大时它可以保持整洁。

【讨论】:

感谢您的回答。我不再收到错误,但我仍然得到undefined 作为isAuth 的值。我应该看到该值还是看到该值为undefined 是否正常? 你不应该看到未定义的,不。如果你从你的 vue 组件中console.log(this),看看你应该看到$store。它有价值吗?您还应该能够深入了解该状态并查看它的价值。那将是一个很好的起点。 我做了一些修改,现在我可以在任何我想看到的地方看到$store。再次感谢您的宝贵时间! 如果你使用直接的 js 而不是 .vue 文件,你会怎么做? @qdeninja 抱歉,这不是我以前做过的,所以不知道。 Vuex 网站应该有一些信息。

以上是关于Vuex无法读取未定义的属性的主要内容,如果未能解决你的问题,请参考以下文章

NativeScript Vue - VueX 不工作:无法读取未定义的属性获取器

无法读取未定义的属性“电子邮件”; firebase 身份验证();使用 Vuex

无法读取 vuex 中 Store._callee 处未定义的属性“getProduct”(操作名称)

NativeScript Vue - VueX 不工作:TypeError:无法读取未定义的属性“状态”

带有 Jest 的 Vuex - 无法读取未定义的属性 <getterName>

TypeError:无法读取未定义的属性“getters”