VueJS状态获取器正在找到匹配项,但未返回正确的值

时间:2019-07-26 11:32:10

标签: vuejs2 vuex

我有一个Vuex状态,其中存储着{LevelId, ElemId}个记录的数组。我有一个正确匹配LevelId的吸气剂,但是它返回的ElemId值始终是0,而不是ElemId的值。

我最初使用的是find,但后来将其更改为for循环以尝试查看为什么这样做。我有一个console.log在此之前立即输出状态,并且它显示ElemId的正确值,但返回的不是此值。直到最近一直在工作。我不确定最近的npm installnpm audit fix是否让某些事情感到沮丧。

const state = {
  LastElemSelIdByLevel: [{
    LevelId: 0 ,
    ElemId: 0 ,
  }],
};

const getters = {
  GetLastElemSelIdByLevel: state => LevelId => {
    // let obj = state.LastElemSelIdByLevel.find(item => item.LevelI == LevelId);
    let obj = 0;
    console.log('Getter for Elem level obj', LevelId, state.LastElemSelIdByLevel);
    for (let i = 0; i < state.LastElemSelIdByLevel.length; i++) {
      if (state.LastElemSelIdByLevel[i].LevelId == LevelId) {
        console.log(
          'Loop found it ',
          i,
          LevelId,
          state.LastElemSelIdByLevel[i].LevelId,
          state.LastElemSelIdByLevel[i].ElemId
        );

        obj = state.LastElemSelIdByLevel[i];

        break;
      }
    }

    if (obj && obj.ElemId > 0 && obj.ElemId) {
      return obj.ElemId;
    } else {
      return -1;
    }
  }
}

从console.log中获取Getter for Elem level obj 我看到例如LevelId为11和state.LastElemSelIdByLevel,其中数组索引3具有ElemId: 3358LevelId: 11(在Chrome控制台中)。

但是,显示Loop found it的第二个console.log 3 11 11 0

因此,它可以正确地在索引{{1}处找到LevelId,并与3的{​​{1}}相匹配,但是它返回的是{{ 1}},而不是LevelId

有人知道为什么会这样吗?

11

1 个答案:

答案 0 :(得分:0)

您好,感谢Linus Borg在Vue论坛上的提示,我找到了解决该问题的方法。组件中有一块手表,由于组件之间的某些复杂交互作用而被触发,这某种程度上使吸气剂中途将ElemId设置为0。我在手表中放置了一个“ if”,以便它仅在ElemId有效且似乎已经治愈的情况下,才调度操作来更新状态。

致谢

Paul Simon

相关问题