无法从已安装的vuex获取状态

时间:2019-05-28 04:19:38

标签: vue.js axios vuex

我无法获得已挂载的vuex的状态值。
看来在mount状态下尚未设置(因为axios尚未成功加载)。
你们能帮我吗,非常感谢
对不起,我的英语不好

这是我的代码:

App.vue

export default {
  created () {
    this.$store.dispatch('retrieveOrderPaymentTypes')
 },
  computed: {
    orderPaymentTypes: {
       get () { return this.$store.getters['loadOrderPaymentTypes'] }
     }
   },
   mounted: function () {
     console.log(this.orderPaymentTypes) //won't work, return null
   },
   watch: {
     orderPaymentTypes: function (val) {
        console.log(val) //work, return object
    }
  }

}

store.js

export const store = new Vuex.Store({
  state: {
    orderPaymentTypes: null
  },
  getters: {
    loadOrderPaymentTypes: function (state) {
      return state.orderPaymentTypes
    }
  },
  actions: {
     retrieveOrderPaymentTypes ({ commit }) {
        axios.get('myurl.php').then(function (response) {
          commit('updateOrderPaymentTypes', response.data)
        }).catch((error) => {
        // silent is golden
        })
      }
    },
    mutations: {
        updateOrderPaymentTypes (state, types) {
           state.orderPaymentTypes = types
        }
     }
})

1 个答案:

答案 0 :(得分:-1)

发生上述情况是因为您刚刚调度了请求,因此在api响应被检索并将数据存储在状态变量中之前,已执行挂接钩中的代码。

检索到api响应后,可以在axios调用中使用promise或async / await来获取结果。

mounted: function () {
 this.retrieveOrderPaymentTypes.then(() => {
   console.log(this.orderPaymentTypes)
 }
}

从创建的挂钩中删除api调用代码。