当前位置: 首页 > 知识库问答 >
问题:

Vuex getter未更新

益兴生
2023-03-14

我有以下要点:

    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; },

返回的值是正确的,直到我改变笔记本电脑数组中的一个元素,然后getter不更新。

共有2个答案

商飞尘
2023-03-14

除了反应性问题和Vue警告之外,可能还有另一个原因,您已经在computed函数中引入了局部变量counter,您可以尝试使用给定的reduce函数。

withEarmarks: state => {
    return state.laptops.reduce((acc, item) => {
        if(item.earmarks.length > 0){
            acc++;
        }
        return acc;
    }, 0);
}

除了回答这个问题,还要考虑@ JpSurreEd的答案。

韩佐
2023-03-14

在您的情况下,state.laptops.earmarks是一个数组,您通过其数组索引state.laptops[index]来操作它。Vue无法对状态数组上的突变做出反应(按索引)。留档为此提供了2个变通方法

// 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)

尽管有文件记录,但我认为在那一页上有一个巨大的霓虹灯发光的标志,上面写着“如果你不知道这一点,你会浪费几个小时的生产力”,这将是一个很好的补充。

你可以在这里阅读更多关于这个“警告”的信息:https://vuejs.org/v2/guide/list.html#Caveats

 类似资料:
  • 我有一个表视图,每次都很好地填充, 我的主控制器: 我的测试类: 扩展测试类并覆盖其运行的Test1类: 我的aHandler: 因为tbl1绑定到Handler。getInstance()。GetData(),第一次初始化该类时,我看到列Test填充了值1,因为TestData=1;但当计时器开始更改测试数据时,表视图不会获得新的赋值。我做错了什么? 我尽我所能解释这个问题,请让我知道,如果它仍

  • 我已经在做我的项目好几个星期了。一切都很好。但今天突然间,我无法加载我更改的一些视图(有些视图可以更改并得到结果)。即使我更换了控制器,它现在仍然工作。根据SO和其他一些网站,我尝试了以下内容 重新启动浏览器 我错过了什么。提前谢谢。

  • 我想简单地通过单击按钮添加新节点(我有jsPlumb源代码endpoint在拖动源代码容器时不会移动,我已经尝试了建议的答案,但仍然不适用于我)。 不幸的是,当我拖动新节点时,endpoint(应该坚持覆盖)没有更新它的位置。endpoint将在我鼠标悬停endpoint后更新它的位置。 这是小提琴 '$('#addNode')。单击(函数(e){var newAgent = $('').attr

  • 当我计算抛物线的新系数时,抛物线的图没有更新。当老鼠是一条抛物线和移动时,计算出新的系数。将显示图形上的新系数,但绘图保持不变。为什么这样?

  • 我在Tasklet中编写了一个业务逻辑,在该逻辑中,我向外部Systema的队列之一发送一条消息,然后使用operator.stop()方法停止作业(有时响应来得很晚,所以我通过停止spring批处理作业来释放系统资源)。 一旦收到来自systemA的回复,我需要再次从上次完成的作业重新启动作业。 这就是我在tasklet中所做的。 我现在面临的问题是,当消息被发送到systemA队列时,我立即得

  • 我在整个应用程序中打开一个游标,在每个SQL语句之前使用,在获取数据之后使用。 如有任何帮助,不胜感激,谢谢!

  • 其行如下: 这意味着,如果用户在date picker控件的文本输入过程中按enter键,那么在用户将数据放入其他控件之前,就会触发事件,我并不特别希望这样。 所以问题是,如果用户在框中输入文本,然后不按Enter就离开框,为什么不改变呢?我找不到在用户离开datepicker框时调用的事件或datepicker的属性来获取控件的文本值并将其与的值进行比较。我是不是漏掉了什么? 这可能是JavaF

  • 所以我的应用程序有一个主窗口显示食谱列表,第二个窗口(从主窗口打开)添加新的食谱到列表(有信息)。两个窗口具有相同的视图模型。经过测试,新的制作方法被成功添加到列表中,但是UI没有更新新的制作方法。我也有一个删除按钮在主窗口为每个食谱和它的工作正常。删除的制作方法将在视图模型和UI中删除。我的代码相当长。我希望它是可读的。下面是我的代码(还有很多其他的UI,所以我只显示相关的代码): 主窗口视图