Vue.js Vuex getter未更新
我有以下要点:Vue.js Vuex getter未更新,vue.js,vuex,Vue.js,Vuex,我有以下要点: withEarmarks: state => { var count = 0; for (let l of state.laptops) { if (l.earmarks.length > 0) { count++; } } return count; } 在组件中,此计算属性派生自该getter: withEarmarks() { return this.$store.ge
withEarmarks: state => {
var count = 0;
for (let l of state.laptops) {
if (l.earmarks.length > 0) {
count++;
}
}
return count;
}
在组件中,此计算属性派生自该getter:
withEarmarks() { return this.$store.getters.withEarmarks; },
返回的值是正确的,直到我更改了laptops数组中的一个元素,然后getter才更新。在您的示例中,state.laptops.earmarks是一个数组,您通过其数组索引
state.laptops[index]
对其进行操作。Vue无法对状态数组(按索引)上的突变作出反应。本文档提供了两种解决方法:
// 1. use purpose built vue method:
Vue.set(state.laptops, index, laptop)
// 2. splice the value in at an index:
state.laptops.splice(index, 1, laptop)
虽然有文件记载,但我认为在页面上有一个巨大的霓虹灯发光的标志,上面写着“如果你不知道这一点,你将浪费数小时的工作效率”,这将是一个很好的补充
您可以在此处阅读有关此“警告”的更多信息:除了反应性问题和Vue警告之外,可能还有另一个原因,您已经在计算函数中引入了局部变量
计数器
,您可以尝试使用给定的reduce
函数
withearcarks:state=>{
返回状态。笔记本电脑。减少((附件,项目)=>{
如果(item.earmarks.length>0){
acc++;
}
返回acc;
}, 0);
}
除了这个答案,再考虑一下@jpschroeder的答案。你是如何在
笔记本电脑数组中进行更改的,你能包含这个代码吗。@saurabh我已经尝试了这两种方法:state.laptops[index]=laptop
和state.laptops[index]=Object.assign({},laptop)
state.laptops=[laptop,…state.laptops]
实际上是这个游戏的忠实粉丝[laptop,…state.laptops]
基本上是一个反移位
,[…state.laptops,laptops]是一个推送
。关于用作贴图的对象和更改属性,我有一个类似的问题。做一个state.map=\uu.clone(state.map)
帮了我一把。这是对这个问题的一个很好的总结:>如果你不知道这个“巨大的霓虹灯发光的标志”,你将浪费数小时的工作效率“哈哈,真的。Thx表示SO存在。常见的错误也是加载时未初始化状态变量。这经常发生在我身上。i、 e:state。加载Vuex时,笔记本电脑必须存在于该状态。