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 原型模式实现OOP的再研究
Apr 09 Javascript
input+select(multiple) 实现下拉框输入值
May 21 Javascript
阻止事件(取消浏览器对事件的默认行为并阻止其传播)
Nov 03 Javascript
jQuery实现购物车表单自动结算效果实例
Aug 10 Javascript
js实现跨域访问的三种方法
Dec 09 Javascript
JavaScript知识点整理
Dec 09 Javascript
由浅入深剖析Angular表单验证
Jul 14 Javascript
jQuery实现表格隔行及滑动,点击时变色的方法【测试可用】
Aug 20 Javascript
JS实现获取当前URL和来源URL的方法
Aug 24 Javascript
JS设置时间无效问题的解决办法
Feb 18 Javascript
Javascript数组方法reduce的妙用之处分享
Jun 10 Javascript
javascript Canvas动态粒子连线
Jan 01 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获取网卡地址的代码
2008/04/09 PHP
php中用数组的方法设置cookies
2011/04/21 PHP
php对包含html标签的字符串进行截取的函数分享
2014/06/19 PHP
Zend Framework教程之Application和Bootstrap用法详解
2016/03/10 PHP
thinkPHP5框架导出Excel文件简单操作示例
2018/08/03 PHP
javascript 验证日期的函数
2010/03/18 Javascript
关于js datetime的那点事
2011/11/15 Javascript
jQuery实现点击标题输入详细信息
2013/04/16 Javascript
jquery实现仿新浪微博带动画效果弹出层代码(可关闭、可拖动)
2015/10/12 Javascript
功能强大的Bootstrap效果展示(二)
2016/08/03 Javascript
JavaScript组合模式学习要点
2016/08/26 Javascript
JS 动态加载js文件和css文件 同步/异步的两种简单方式
2016/09/23 Javascript
浅谈移动端之js touch事件 手势滑动事件
2016/11/07 Javascript
jquery日历插件e-calendar升级版
2016/11/10 Javascript
bootstrap轮播图示例代码分享
2017/05/17 Javascript
在Vue中使用icon 字体图标的方法
2019/06/14 Javascript
Python  __getattr__与__setattr__使用方法
2008/09/06 Python
纯Python开发的nosql数据库CodernityDB介绍和使用实例
2014/10/23 Python
Python之使用adb shell命令启动应用的方法详解
2019/01/07 Python
django 实现将本地图片存入数据库,并能显示在web上的示例
2019/08/07 Python
python3实现微型的web服务器
2019/09/03 Python
在python3中实现更新界面
2020/02/21 Python
优质飞蝇钓和渔具:RiverBum
2020/05/10 全球购物
敏捷开发的主要原则都有哪些
2015/04/26 面试题
主要的Ajax框架都有什么
2013/11/14 面试题
大学本科毕业生求职简历的自我评价
2013/10/09 职场文书
高中数学教师求职信
2013/10/30 职场文书
中专三年学习的个人自我评价
2013/12/12 职场文书
销售团队获奖感言
2014/08/14 职场文书
工作骂脏话检讨书
2014/10/05 职场文书
终止解除劳动合同证明书
2015/06/17 职场文书
导游词之宁夏贺兰山岩画
2019/11/08 职场文书
上帝为你开了一扇窗之Tkinter常用函数详解
2021/06/02 Python
Feign调用传输文件异常的解决
2021/06/24 Java/Android
nginx设置资源请求目录的方式详解
2022/05/30 Servers
浅谈音视频 pts dts基本概念及理解
2022/08/05 数码科技