Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vue.js Vuex getter未更新_Vue.js_Vuex - Fatal编程技术网

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时,笔记本电脑必须存在于该状态。