使用Vue组件渲染功能时的无限循环

Posted

技术标签:

【中文标题】使用Vue组件渲染功能时的无限循环【英文标题】:Infinite loop when using Vue component render function 【发布时间】:2021-06-01 13:18:17 【问题描述】:

我正在使用 Vue 组件来呈现一些表头,如下所示:

render (createElement) 
  return createElement('div',  class: 'header' ,
    Array.apply(null,  length: this.initHours.length ).map(() => 
      return createElement('div',  class: 'frame' , this.getHourIndex() )
    )
  )

问题是当 console.log 在 hourIndex 上完成时(通过数组运行)进入无限循环。

getHourIndex 函数是:

getHourIndex () 
  const headerData = this.initHours[this.hourIndex]
  this.hourIndex++
  console.log(this.hourIndex) /// this is what's telling me it's an infinite loop
  return headerData

任何关于为什么这样做这个无限循环的方向(考虑到 hourIndex 数组只有 25 个元素)将不胜感激。

【问题讨论】:

【参考方案1】:

每当组件呈现响应式数据时,如果数据发生变化,它也必须重新呈现该数据。这是反应性的一部分。所以渲染过程本身不应该改变数据,否则会出现死循环:1)渲染,2)数据改变,3)导致重新渲染,4)数据改变,无限循环。

这就是这段代码中发生的事情,因为渲染函数递增this.hourIndex

this.hourIndex++

如果你只需要索引,从map获取它:

Array.apply(null,  length: this.initHours.length ).map((_, index) => 
  return createElement('div',  class: 'frame' , index )
)

【讨论】:

以上是关于使用Vue组件渲染功能时的无限循环的主要内容,如果未能解决你的问题,请参考以下文章

组件渲染函数中的Vue无限更新循环

vue 错误:组件渲染函数中的无限更新循环

控制台上的 Vue 警告:组件渲染函数中可能存在无限更新循环

Vue.js 警告您可能在组件渲染函数中有无限更新循环

如何修复或抑制误报“您可能在组件渲染函数中有无限更新循环”Vue 警告

尝试根据值设置不同的数组。错误:组件渲染函数中可能存在无限更新循环