【问题标题】:this$store function is undefinedthis$store 函数未定义
【发布时间】:2019-11-04 08:27:42
【问题描述】:

我正在尝试使用 vuex 的商店进行一些 API 调用,但在安装 vuex、将商店导入我的文件并遵循其他堆栈溢出答案之后,例如确保安装了 vuex,如果我使用“Vuex. Store”等,但我的 loadCalls 功能仍然无法正常工作。

这是我得到的错误:

this.$store.loadCalls is not a function

这是我的函数以及我尝试调用它的方式,它在我的 store.js 文件的 ACTIONS 部分中声明。

loadCalls() {
   axios
        .get("/some/calls")
        .then(res => {
          console.log(res)
        });
},

当我的组件加载时,我尝试在我的beforeMount() 中使用它:

beforeMount(){
    this.$store.loadCalls();
}

我在这里做错了什么?

【问题讨论】:

  • 也许,您忘记在 Vue 实例中包含 store。 import store from './store' 在哪里?
  • 在我的 main.js 文件中。我在这里也定义了:new Vue({ router, store, render: h => h(App), }).$mount('#app')
  • 请注意,mounted 并不能保证所有子组件也已安装。如果你想等到整个视图被渲染,你可以在mounted里面使用vm.$nextTick:见:vuejs.org/v2/api/#mounted
  • 您商店的actions 部分是否定义了loadCalls
  • 是的,它在我的商店文件的我的操作部分中

标签: axios vuex store


【解决方案1】:

如果你定义了这样的动作:

actions: {
  loadCalls() {
    // ...
  }
}

那么你可以这样称呼它:

this.$store.dispatch('loadCalls');

操作不会直接公开,您可以使用dispatch 调用它们。

https://vuex.vuejs.org/guide/actions.html#dispatching-actions

【讨论】:

  • 不错!谢谢老兄,帮了大忙。
  • 我还有一个问题。这个调用给了我一个 bigass 数组。我如何将它保存在一个状态中并在其他组件中使用它?
猜你喜欢
  • 2019-12-29
  • 2020-03-03
  • 2022-08-15
  • 2020-03-13
  • 2018-08-01
  • 1970-01-01
  • 2018-11-23
  • 2021-05-07
  • 2015-07-20
相关资源
最近更新 更多