vuejs2 - 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: 3358
和LevelId: 11
(在Chrome 控制台中)。
但是,第二个 console.logLoop found it
显示 3 11 11 0
所以它正确地找到了LevelId
at Index 3
,并匹配了LevelId
of 11
,但它返回了一个ElemId
of0
而不是3358
。
有谁知道这可能是为什么?
My package.json file shows
vue ^2.5.2
vuex ^3.1.0
解决方案
嗨感谢 Vue 论坛上 Linus Borg 的提示,我找到了问题的答案。由于组件之间的一些复杂的相互作用,组件中有一个手表被触发,这在某种程度上将 ElemId 设置为 0 在 getter 中途。我在手表中添加了一个“if”,以便它仅在 ElemId 有效时才发送更新状态的操作,并且这似乎已经治愈了它。
问候
保罗·西蒙
推荐阅读
- spring - Spring-boot 存储库未注册为有效 bean
- c# - 如何获取 oauth 刷新令牌?
- python - Errno 13 Permission Denied 在我刚刚创建的目录中
- java - 如何将场景的边框设置为不同颜色的 JavaFX?
- html5-canvas - HTML5 Canvas - 为带有阴影的透明 png 添加边框
- django - 如何使用 Graphene 和 Relay 访问 CustomNode 上的 Meta
- python - 使用 python3 将相同的环境构建到 pex 文件中失败,但适用于 python2
- mysql - Windows 服务管理器中没有 MySQL 服务
- azure - Azure VNET 中的 Internet 丢失
- mysql - 查找具有两个匹配字段的 mySQL 行