vue组件更新数据时导致死循环

Vue component results in infinite loop when updating data

每当我尝试更新 medMins 时,该函数都会产生两次正确的结果。但是,Vue returns 和

[Vue warn]: You may have an infinite update loop in a component render function.

我尝试将 medMins 切换为计算 属性 但得到了相同的结果。我读到问题是组件呈现然后我正在更改一些组件数据,在此期间一些反应数据被更改导致它重新呈现......等等。有没有办法可以避免这种情况?我可以更新这个组件中的 medMins 还是我必须做一些其他的事情?任何帮助将不胜感激。

Vue.component('day', {
    //props: ['items'] or
    props: {
        dayofweek: {
            type: Array,
            required: true
        },
        name:{
            type: String,
            default: 'Blarg'
        },
    },
    data: function() {
      return {
          medMins: 0
      }
    },
    methods: {
        updateMed: function(day) {
            this.medMins += Number(day.endTimeMillis/60000).toFixed()-Number(day.startTimeMillis/60000).toFixed()
        }
    },
    template: ''+
        '         <div>'+
        '           <h1>{{name}}</h1>\n' +
        '            <div class = "row">\n' +
        '                <div class ="col" v-for="day in dayofweek">{{day.activityType}}' +
        '                   <div v-if="`${day.activityType}` == 45" v-on="updateMed(day)"></div>' +
        '                </div>' +
        '            </div>' +
        '            <h1>{{medMins}}</h1>'+
        '         </div>',
    computed: {

    }
});

在Vue世界里,v-on是一个事件监听器,但是你需要说明你需要监听什么类型的事件。

假设它是 click 事件那么

v-on:click="updateMed(day)"

希望对您有所帮助!

听起来您只想要 medMins 的计算 属性。像这样

// no need for "data" as far as I can see
computed: {
  medMins () {
    return this.dayofweek.reduce((medMins, { activityType, endTimeMillis, startTimeMillis }) => {
      if (activityType == 45) {
        medMins += Number(endTimeMillis/60000).toFixed()-Number(startTimeMillis/60000).toFixed()
      }
      return medMins
    }, 0)
  }
},
template: `
    <div>
      <h1>{{name}}</h1>
      <div class = "row">
        <div class="col" v-for="day in dayofweek">
          {{day.activityType}}
        </div>
      </div>
      <h1>{{medMins}}</h1>
    </div>
`

这将为 medMins 生成一个数字,用于计算所有 45 activity 类型的总数。