【问题标题】:Where is the loop infinity?循环无穷大在哪里?
【发布时间】:2019-01-03 16:49:33
【问题描述】:

我发现自己遇到了一个无限循环错误,但我不知道它在哪里。那是我添加类的时候。

模板:

  <tr class="listOfDay">
    <td>Jour de la semaine</td>
    <td v-for="day in nbDaysInMonth" :key="index" :class="{weekend: isWeekend}">{{dayOfWeek(day,index)}}</td>
  </tr>

脚本:

data: () {
   isWeekend: false,
},
methods : {
  dayOfWeek(day) {
    var d = moment(new Date(this.currentYear + '-' + this.nbMonth + '-' + day)).day();
    if(d === 5 || d === 6) {
      this.isWeekend = true
    } else {
      this.isWeekend = false
    }
    return this.days[d]
  }
}

【问题讨论】:

  • 能否提供一份codesandbox.io 的复制品?
  • 首先,this.nbDaysInMonththis.currentYearthis.nbMonththis.days 在您的脚本示例中似乎未定义。
  • Michael 是对的,它正在重新渲染,因为您在渲染期间使用更改值 isWeekend,这会导致无限循环。但是,如果您想了解更多关于如何解决此问题的信息,则需要提供更多代码。

标签: javascript vue.js vuejs2 momentjs


【解决方案1】:

您在渲染组件时更改isWeekend,因此导致组件重新渲染,我相信这会导致无限循环。

不要将isWeekend 计算为dayOfWeek 的一部分。我认为最好的解决方案是创建另一种方法。

编辑:正如评论中所建议的,使用计算值可能是一个更好的解决方案。

【讨论】:

  • 也避免使用可以使用computed 值的方法。减少可变性问题并提高渲染效率。
  • 是的,可能更好,但我对 Vue 并不太熟悉。我在 React 中看到了相同的(反)模式,尽管如此认可它。
  • 感谢您的帮助。我创建了两种方法。模板::class="{weekend: isWeekend(day)}"&gt;{{dayOfWeek(day)}} 脚本:dayOfWeek(day) { var d = moment(new Date(this.currentYear + '-' + this.nbMonth + '-' + day)).day(); return this.days[d] }, isWeekend(day) { return this.dayOfWeek(day) === "S" || this.dayOfWeek(day) === "D" }
猜你喜欢
  • 1970-01-01
  • 2023-02-07
  • 2012-04-10
  • 2021-11-17
  • 1970-01-01
  • 2014-10-30
  • 1970-01-01
  • 2017-03-08
  • 2022-08-12
相关资源
最近更新 更多