首页 > 解决方案 > VueJS State Getter 正在寻找匹配项,但未返回正确的值

问题描述

我有一个 Vuex 状态,它存储一个{LevelId, ElemId}记录数组。我有一个与 LevelId 正确匹配的 getter,但ElemId它返回的值始终是0,而不是ElemId.

我最初使用find但将其更改为for循环以尝试了解它为什么这样做。我有一个 console.log 在此之前输出状态,它显示了正确的值,ElemId但这不是返回的值。这一直工作到最近。我不确定是最近npm install还是npm 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 控制台中)。

但是,第二个 console.logLoop found it显示 3 11 11 0

所以它正确地找到了LevelIdat Index 3,并匹配了LevelIdof 11,但它返回了一个ElemIdof0而不是3358

有谁知道这可能是为什么?

My package.json file shows
vue ^2.5.2
vuex ^3.1.0

标签: vuejs2vuex

解决方案


嗨感谢 Vue 论坛上 Linus Borg 的提示,我找到了问题的答案。由于组件之间的一些复杂的相互作用,组件中有一个手表被触发,这在某种程度上将 ElemId 设置为 0 在 getter 中途。我在手表中添加了一个“if”,以便它仅在 ElemId 有效时才发送更新状态的操作,并且这似乎已经治愈了它。

问候

保罗·西蒙


推荐阅读