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 数字格式化输出的实现代码
Dec 10 Javascript
node.js中的path.normalize方法使用说明
Dec 08 Javascript
js的for in循环和java里foreach循环的区别分析
Jan 28 Javascript
详解Vue.js之视图和数据的双向绑定(v-model)
Jun 23 Javascript
基于hover的用法实例(推荐)
Jul 04 Javascript
angular框架实现全选与单选chekbox的自定义
Jul 06 Javascript
以BootStrap Tab为例写一个前端组件
Jul 25 Javascript
将jquery.qqFace.js表情转换成微信的字符码
Dec 01 jQuery
JavaScript实现的鼠标跟随特效示例【2则实例】
Dec 22 Javascript
详解JavaScript函数callee、call、apply的区别
Mar 08 Javascript
JavaScript canvas动画实现时钟效果
Feb 10 Javascript
原生js实现移动小球(碰撞检测)
Dec 17 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
Kindeditor编辑器添加图片上传水印功能(php代码)
2017/08/03 PHP
php中加密解密DES类的简单使用方法示例
2020/03/26 PHP
用JavaScript显示随机图像或引用
2009/04/21 Javascript
javaScript 数值型和字符串型之间的转换
2009/07/25 Javascript
JQuery EasyUI 对话框的使用方法
2010/10/24 Javascript
JavaScript闭包 懂不懂由你反正我是懂了
2011/10/21 Javascript
javascript结合html5 canvas实现(可调画笔颜色/粗细/橡皮)的涂鸦板
2013/04/27 Javascript
鼠标划过实现延迟加载并隐藏层的js代码
2013/10/11 Javascript
parentElement,srcElement的使用小结
2014/01/13 Javascript
JS执行删除前的判断代码
2014/02/18 Javascript
JavaScript lastIndexOf方法入门实例(计算指定字符在字符串中最后一次出现的位置)
2014/10/17 Javascript
JavaScript jQuery 中定义数组与操作及jquery数组操作
2015/12/18 Javascript
jQuery短信验证倒计时功能实现方法详解
2016/05/25 Javascript
js仿小米官网图片轮播特效
2016/09/29 Javascript
微信小程序 css使用技巧总结
2017/01/09 Javascript
基于jQuery实现弹幕APP
2017/02/10 Javascript
vue.js如何将echarts封装为组件一键使用详解
2017/10/10 Javascript
es6函数中的作用域实例分析
2020/04/18 Javascript
Vue 同步异步存值取值实现案例
2020/08/05 Javascript
JavaScript实现滑块验证解锁
2021/01/07 Javascript
Python使用PIL库实现验证码图片的方法
2016/03/11 Python
Python3之读取连接过的网络并定位的方法
2018/04/22 Python
使用python存储网页上的图片实例
2018/05/22 Python
python基于http下载视频或音频
2018/06/20 Python
python调用外部程序的实操步骤
2019/03/04 Python
python3 线性回归验证方法
2019/07/09 Python
Python bytes string相互转换过程解析
2020/03/05 Python
Html5页面中的返回实现的方法
2018/02/26 HTML / CSS
德国著名廉价网上药店:Shop-Apotheke
2017/07/23 全球购物
俄罗斯茶和咖啡网上商店:Tea.ru
2021/01/26 全球购物
Kingsoft金山公司C/C++笔试题
2016/05/10 面试题
大学校园毕业自我鉴定
2014/01/15 职场文书
大学生党员自我批评
2014/02/14 职场文书
《诺贝尔》教学反思
2014/02/17 职场文书
幼儿园毕业致辞
2015/07/29 职场文书
计算机实训心得体会
2016/01/14 职场文书