【问题标题】:Unreliable data Vuex不可靠的数据 Vuex
【发布时间】:2020-10-16 05:21:58
【问题描述】:

我正在尝试使用 Vuex,但无法理解为什么我的数据不是预期值。

我要做的是将getter的结果传递给突变提交,如下所示

// TEST PRINT: return value of getter
console.log(this.$store.getters.reservationsCurrentWeek);
        
switch (this.activeCalendar) {
  case 'week':
   // Commit with getter result
   this.$store.commit('setShownReservations', this.$store.getters.reservationsCurrentWeek);
   break;

第一次打印显示了预期的结果。 但是,当我打印出在突变内部实际传递的值时,如下所示:

// TEST PRINT: return value of getter
console.log(this.getters.reservationsCurrentWeek);
      
// TEST PRINT: parameter passed to the mutation.
console.log(value);
      
state.shownReservations = value;

参数值不是getter返回的值(而是一些旧值)。当我直接在我的突变中访问 getter 时,它也会给出正确的值。我不明白为什么我不能将 getter 的结果作为参数传递给突变提交,以及为什么它会产生不可靠的值?

【问题讨论】:

    标签: vue.js vuex store getter mutation


    【解决方案1】:

    您尝试从哪里访问 this.getters.reservationsCurrentWeek ?如果您要从突变中访问 getter,并且 getter 和突变放置在一个文件中,您可以使用

    mutations: {
      YOUR_MUTATION(state, {data, getters}) {
        console.log(getters);
      }
    }
    

    然后访问 getter。或者从另一个文件中导入 getter,如果它放在单独的文件中。

    【讨论】:

    • 感谢您提供的信息。它有效,但带来了另一个问题,即我在 getter 中使用的过滤器函数在未定义时调用,即使我初始化了状态 state: { reservations: {} }。然而,从组件或突变内部调用 getter 是一种好习惯吗?而且我仍然不明白为什么在我的组件中获取 getter 的计算值然后将其传递给突变,因为数据不起作用。或者至少为什么当作为数据参数传递时结果发生了变化。
    • 我使用突变而不是动作的全部原因是因为同步性不希望出现不一致。只是同步设置和获取状态。但现在我的应用程序似乎有意外的行为。不知道是我的理解不足还是执行不足。
    猜你喜欢
    • 2013-08-26
    • 1970-01-01
    • 2010-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-06
    • 2017-10-21
    • 2021-09-30
    相关资源
    最近更新 更多