Vuex Getters返回未定义

时间:2019-01-30 23:04:42

标签: vuejs2 store vuex vuex-modules

我遇到了Vuex吸气剂问题,其中的臭虫返回的状态未定义(在Vue开发控制台中,Chrome开发者控制台中未记录任何错误)。

如果将mapGetters()注释掉(如下面的示例代码),则返回的数据将显示在屏幕上->如果用户单击包含数据的链接,则提供此信息。如果用户在应显示数据的位置直接进入应用程序,则不会显示数据。

有一个similar question,但没有被接受的答案

Vue控制台日志:

  

状态:

     

$ _ lgdHRS:Object

     

总小时数:129

     
     

获取者:

     

$ _ lgdHRS / totHrs:未定义

SomeContainer.vue

<script>
import store from '../../_store'
import { mapState, mapGetters } from 'vuex'

export default {
  computed: {
    ...mapState('$_lgdHRS',{
      totHrs : 'totHrs',
    }),

  // ...mapGetters('$_lgdHRS',{
  //    totHrs  : 'totHrs',
  //    airHrs  : 'airHrs',
  //    picHrs  : 'picHrs',
  //    pmcHrs  : 'pmcHrs',
  //    voHrs   : 'voHrs',
  //    trngHrs : 'trngHrs'
  // }),
  },

  created() {
    this.storeKey = '$_lgdHRS';
      if (!(this.storeKey in this.$store._modules.root._children)) {
        this.$store.registerModule(this.storeKey, store);
    }
  },

  mounted() {
    this.$store.dispatch('$_lgdHRS/getLogSummary');
  },
}
</script>
<template>
    <total-summary :hours="totHrs" />
</template>

state.js

export const state = {
  totHrs: Number,
}

getters.js

const totHrs = state => state.totHrs;
export default {
  totHrs,
};

mutations.js

const
TOTAL_HRS_UPDATED = (state, totHrs) => {
  state.totHrs = +totHrs;
};
export default {
    TOTAL_HRS_UPDATED,
};

2 个答案:

答案 0 :(得分:0)

最可能的原因是您刚刚将请求分散在已挂载的状态,并且在将数据设置为状态变量之前,将显示组件。 因此,您可以尝试在挂载以及存储操作中使用异步等待。 请参考以下链接,并检查其中的最后一个示例。 https://vuex.vuejs.org/guide/actions.html

答案 1 :(得分:0)

问题是我像在其他框架中一样嵌套变量。

示例:

// NESTED VARS
const r = response
      totHrs  = r.total,
      airHrs  = r.airborne,
      picHrs  = r.PIC,
      pmcHrs  = r.PMC,
      voHrs   = r.VO,
      trngHrs  = r.training;

// CHANGE TO:
const r = response
const totHrs  = r.total
const airHrs  = r.airborne
const picHrs  = r.PIC
const pmcHrs  = r.PMC
const voHrs   = r.VO
const trngHrs = r.training

我不知道为什么,但是您的意见将在评论中得到极大的赞赏。