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 相关文章推荐
JQuery+CSS提示框实现思路及代码(纯手工打造)
May 07 Javascript
jquery实现图片左右间隔滚动特效(可自动播放)
May 08 Javascript
jquery和javascript的区别(常用方法比较)
Jul 04 Javascript
JavaScript编程中window的location与history对象详解
Oct 26 Javascript
jQuery中队列queue()函数的实例教程
May 03 Javascript
AngularJs Modules详解及示例代码
Sep 01 Javascript
AngularJS ng-style中使用filter
Sep 21 Javascript
详谈js中数组(array)和对象(object)的区别
Feb 27 Javascript
node跨域请求方法小结
Aug 25 Javascript
vue仿淘宝订单状态的tab切换效果
Jun 23 Javascript
vue 添加vux的代码讲解
Nov 30 Javascript
深入了解JavaScript词法作用域
Jul 29 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中操作MySQL数据库的一些要注意的问题
2006/10/09 PHP
PHP伪造referer实例代码
2008/09/20 PHP
php中的boolean(布尔)类型详解
2013/10/28 PHP
php操作redis缓存方法分享
2015/06/03 PHP
PHP反射API示例分享
2016/10/08 PHP
php获取给定日期相差天数的方法分析
2017/02/20 PHP
PHP高效获取远程图片尺寸和大小的实现方法
2017/10/20 PHP
javascript 贪吃蛇实现代码
2008/11/22 Javascript
JQuery在光标位置插入内容的实现代码
2010/06/18 Javascript
select、radio表单回显功能实现避免使用jquery载入赋值
2013/06/08 Javascript
原生js做的手风琴效果的导航菜单
2013/11/08 Javascript
优化Jquery,提升网页加载速度
2013/11/14 Javascript
jquery的ajax和getJson跨域获取json数据的实现方法
2014/02/04 Javascript
ReactNative页面跳转Navigator实现的示例代码
2017/08/02 Javascript
非常实用的jQuery代码段集锦【检测浏览器、滚动、复制、淡入淡出等】
2019/08/08 jQuery
JavaScript使用setTimeout实现倒计时效果
2021/02/19 Javascript
nodejs处理tcp连接的核心流程
2021/02/26 NodeJs
[02:18]《我与DAC》之工作人员:为了热爱DOTA2的玩家们
2018/03/28 DOTA
Python os模块中的isfile()和isdir()函数均返回false问题解决方法
2015/02/04 Python
举例讲解Python中字典的合并值相加与异或对比
2016/06/04 Python
浅谈python中scipy.misc.logsumexp函数的运用场景
2016/06/23 Python
Python中 Lambda表达式全面解析
2016/11/28 Python
Python基于回溯法子集树模板解决数字组合问题实例
2017/09/02 Python
Python3按一定数据位数格式处理bin文件的方法
2019/01/24 Python
关于python中导入文件到list的问题
2020/10/31 Python
英国高档时尚男装购物网站:MR PORTER
2016/08/09 全球购物
Hawes & Curtis官网:英国经典品牌
2019/07/27 全球购物
Ooni英国官网:披萨烤箱
2020/05/31 全球购物
努力学习演讲稿
2014/05/10 职场文书
珍惜资源的建议书
2014/08/26 职场文书
2014年驾驶员工作总结
2014/11/18 职场文书
mysql优化
2021/04/06 MySQL
springBoot基于webSocket实现扫码登录
2021/06/22 Java/Android
MySQL定时备份数据库(全库备份)的实现
2021/09/25 MySQL
使用Python通过企业微信应用给企业成员发消息
2022/04/18 Python
Python matplotlib绘制条形统计图 处理多个实验多组观测值
2022/04/21 Python