【问题标题】:Vue component results in infinite loop when updating dataVue组件更新数据时导致死循环
【发布时间】:2019-08-13 01:31:21
【问题描述】:

每当我尝试更新 medMins 时,该函数都会产生两次正确的结果。然而,Vue 返回

[Vue 警告]:组件渲染函数中可能存在无限更新循环。

我尝试将 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: {

    }
});

【问题讨论】:

  • 您似乎没有正确使用v-on。你想听什么活动?
  • 感谢您的回复,我没有在听任何活动。如果 day.activityType = 45,我只想调用 updateMed()。我将如何在模板中调用该方法?

标签: loops vue.js vue-component infinite


【解决方案1】:

在 Vue 世界中,v-on 是一个事件侦听器,但您需要说明您需要侦听哪种类型的事件。

假设是click事件,那么

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

希望这会有所帮助!

【讨论】:

  • 谢谢。那么我将如何从模板中调用方法呢?
  • 为此,您可以使用计算属性,您能告诉我场景是什么吗?
【解决方案2】:

听起来您只需要 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 活动类型的总数。

【讨论】:

  • 谢谢,伙计,这工作得很好。对 Vue 来说还是新手,这是一个巨大的帮助。
猜你喜欢
  • 2021-09-09
  • 1970-01-01
  • 2022-11-27
  • 2021-05-06
  • 1970-01-01
  • 2021-04-27
  • 2021-03-14
  • 2015-06-08
  • 2021-06-17
相关资源
最近更新 更多