Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript &引用;组件渲染函数中可能有一个无限更新循环;Vue组件中的警告_Javascript_Vue.js_Vuejs2 - Fatal编程技术网

Javascript &引用;组件渲染函数中可能有一个无限更新循环;Vue组件中的警告

Javascript &引用;组件渲染函数中可能有一个无限更新循环;Vue组件中的警告,javascript,vue.js,vuejs2,Javascript,Vue.js,Vuejs2,我正在创建一个具有排序功能的基本表: <template> <!-- more code --> <tr v-for="item in sortBy(data.body, { name: 'name', order: 1 })"> <td v-for="field in item">{{ field }}</td> </tr> <!-- data.body => [{ name: Grou

我正在创建一个具有排序功能的基本表:

<template>
  <!-- more code -->
  <tr v-for="item in sortBy(data.body, { name: 'name', order: 1 })">
    <td v-for="field in item">{{ field }}</td>
  </tr>
  <!-- data.body => [{ name: Group 1 }, { name: Group2 }, // etc.] -->
</template>

props: {
  data: {
    type: Object,
    default () {
      return {}
    }
  }
},

methods: {
  sortBy (data, params) { 
    // the warning disappears if I only leave "return data"
    data.sort((a, b) => {
      return a[params.name] - b[params.name] * params.order
    })
    return data
  }
}

{{field}}
道具:{
数据:{
类型:对象,
默认值(){
返回{}
}
}
},
方法:{
排序(数据,参数){
//如果我只留下“返回数据”,警告将消失
数据排序((a,b)=>{
返回a[params.name]-b[params.name]*params.order
})
返回数据
}
}
出于某种原因,我收到了以下警告:

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


这是为什么?如何修复?

您收到警告,因为您正在更改sortBy中data.body的值。此数据更改将导致渲染功能再次运行。没有得到无限循环的原因是,在第二次调用sortBy时,数据已经排序,这不会导致data.body的数据更改

解决方案就是Jaromanda X提到的。使用slice将创建数组的副本,这意味着data.body的值不会更改,因此不会调用重新渲染

return data.slice().sort(....

嗯,这是一个警告而不是错误:p try
return data.slice().sort(…