Vue infinite update loop的问题解决


Posted in Javascript onApril 23, 2019

一个尤大大曾回复过的问题

vue warn : You may have an infinite update loop in a component render function

最近再写一个数组渲染时,源数据是拿到的数组经过排序后的数组,正常运行却出现爆红:

报红代码:

computed: {
 ...mapState({
  fromNames (state) {
  let fromNames = state.quote.fromNames;
  return fromNames.sort((a, b) => b.isBind - a.isBind);;
  },
 }),
 },

然后...

Vue infinite update loop的问题解决

然后百思不得解,最终找到源头:

Vue infinite update loop的问题解决

你的确导致了一个无限循环, 因为array.sort()改变了数组自身,导致了过滤器又一次被触发。确保在副本上对数组排序:
return value.slice().sort(...)

解决方案:

computed: {
 ...mapState({
  fromNames (state) {
  let fromNames = state.quote.fromNames;
  return fromNames.slice().sort((a, b) => b.isBind - a.isBind);
  },
 }),
 },

数组方法 array.slice()用法

arr.slice([begin[, end]])

slice() 方法会浅复制(shallow copy)数组的一部分到一个新的数组,并返回这个新数组。

begin 起始位置 如果未定义,就默认0;如果大于数组长度,返回空数组;如果是负数,则从末尾算起;

end 结束位置(不包含该位置元素)如果省略了,就默认到末尾;如果大于数组长度,就取数组长度;如果是负数,则从末尾算起。

技巧:处理类数组对象

slice() 可以用于把一个类数组对象转化为一个新数组

例如:

function list() {
 return Array.prototype.slice.call(arguments);
}

var list1 = list(1, 2, 3); // [1, 2, 3]

也可以使用.call绑定在函数的Function.prototype(也可以被简化为[].slice.call(arguments)

var unboundSlice = Array.prototype.slice;
var slice = Function.prototype.call.bind(unboundSlice);

function list() {
 return slice(arguments);
}

var list1 = list(1, 2, 3); // [1, 2, 3]

或者

[].slice.call({ 0: 0, 1 : 2, 2: 4, length: 4 })
//[0, 2, 4, empty]

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript闭包传参和事件的循环绑定示例探讨
Apr 17 Javascript
JavaScript获取网页支持表单字符集的方法
Apr 02 Javascript
javascript实现拖动元素交换位置
Nov 29 Javascript
Vue数据驱动模拟实现2
Jan 11 Javascript
javascript 判断当前浏览器版本并判断ie版本
Feb 17 Javascript
jQuery中的on与bind绑定事件区别实例详解
Feb 28 Javascript
了解JavaScript中let语句
May 30 Javascript
新手入门带你学习JavaScript引擎运行原理
Jun 24 Javascript
小程序中英文混合排序问题解决
Aug 02 Javascript
layui.tree组件的使用以及搜索节点功能的实现
Sep 26 Javascript
js实现全选和全不选
Jul 28 Javascript
JavaScript Dom实现轮播图原理和实例
Feb 19 Javascript
详解JavaScript 新语法之Class 的私有属性与私有方法
Apr 23 #Javascript
仿ElementUI实现一个Form表单的实现代码
Apr 23 #Javascript
Vue在 Nuxt.js 中重定向 404 页面的方法
Apr 23 #Javascript
vue项目首屏加载时间优化实战
Apr 23 #Javascript
灵活使用console让js调试更简单的方法步骤
Apr 23 #Javascript
详解实现一个通用的“划词高亮”在线笔记功能
Apr 23 #Javascript
Vue源码学习之关于对Array的数据侦听实现
Apr 23 #Javascript
You might like
php防止sql注入简单分析
2015/03/18 PHP
PHP htmlspecialchars()函数用法与实例讲解
2019/03/08 PHP
gearman中worker常驻后台,导致MySQL server has gone away的解决方法
2020/02/27 PHP
node.js 一个简单的页面输出实现代码
2012/03/07 Javascript
jQuery实现的漂亮表单效果代码
2015/08/18 Javascript
Angular Js文件上传之form-data
2015/08/28 Javascript
学习javascript面向对象 理解javascript对象
2016/01/04 Javascript
原生javascript实现解析XML文档与字符串
2016/03/01 Javascript
浅谈jQuery添加的HTML,JS失效的问题
2016/10/05 Javascript
nodejs之get/post请求的几种方式小结
2017/07/26 NodeJs
浅析js实现网页截图的两种方式
2019/11/01 Javascript
解决vue自定义全局消息框组件问题
2019/11/22 Javascript
js实现简单的秒表
2020/01/16 Javascript
Vue.js中使用Vuex实现组件数据共享案例
2020/07/31 Javascript
openlayers 3实现车辆轨迹回放
2020/09/24 Javascript
[49:08]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第一场 11.27
2020/12/01 DOTA
python2.7的编码问题与解决方法
2016/10/04 Python
Python实现注册登录系统
2017/08/08 Python
scrapy-redis的安装部署步骤讲解
2019/02/27 Python
妙用itchat! python实现久坐提醒功能
2019/11/25 Python
Python是什么 Python的用处
2020/05/26 Python
如何对python的字典进行排序
2020/06/19 Python
关于Python不换行输出和不换行输出end=““不显示的问题(亲测已解决)
2020/10/27 Python
详解如何在登录过期后跳出Ifram框架
2020/09/10 HTML / CSS
GetYourGuide台湾:预订旅游活动、景点和旅游项目
2019/06/10 全球购物
StubHub美国:购买或出售您的门票
2019/07/09 全球购物
技术经理的自我评价范文
2013/12/03 职场文书
爱心捐款倡议书
2014/04/14 职场文书
热爱祖国的演讲稿
2014/05/04 职场文书
机械系毕业生求职信
2014/05/28 职场文书
小学生一分钟演讲稿
2014/08/26 职场文书
教师批评与自我批评
2014/10/15 职场文书
2015年医院药剂科工作总结
2015/05/04 职场文书
幼儿园科学课教学反思
2016/03/03 职场文书
SpringBoot项目中控制台日志的保存配置操作
2021/06/18 Java/Android
MySQL表类型 存储引擎 的选择
2021/11/11 MySQL