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 each函数的链式调用
Jul 22 Javascript
jQuery选中select控件 无法设置selected的解决方法
Sep 01 Javascript
javascript:FF/Chrome与IE动态加载元素的区别说明
Jan 26 Javascript
javascript中attribute和property的区别详解
Jun 05 Javascript
JavaScript监听和禁用浏览器回车事件实例
Jan 31 Javascript
js图片模糊切换显示特效的方法
Feb 17 Javascript
简单介绍JavaScript的变量和数据类型
Jun 03 Javascript
Angular外部使用js调用Angular控制器中的函数方法或变量用法示例
Aug 05 Javascript
Bootstrap 网站实例之单页营销网站
Oct 20 Javascript
AngularJS extend用法详解及实例代码
Nov 15 Javascript
详解AngularJS用Interceptors来统一处理HTTP请求和响应
Jun 08 Javascript
基于vue2.0实现的级联选择器
Jun 09 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
深入理解require与require_once与include以及include_once的区别
2013/06/05 PHP
PHP5各个版本的新功能和新特性总结
2014/03/16 PHP
Smarty环境配置与使用入门教程
2016/05/11 PHP
用JavaScript页面不刷新时全选择,全删除(GridView)
2009/04/14 Javascript
LazyLoad 延迟加载(按需加载)
2010/05/31 Javascript
基于JQuery的数字改变的动画效果--可用来做计数器
2010/08/11 Javascript
Document:getElementsByName()使用方法及示例
2013/10/28 Javascript
jquery中$(#form :input)与$(#form input)的区别
2014/08/18 Javascript
Javascript实现获取窗口的大小和位置代码分享
2014/12/04 Javascript
贴近用户体验的Jquery日期、时间选择插件
2015/08/19 Javascript
判断是否存在子节点的实现代码
2016/05/18 Javascript
深入浅析JavaScript中的3DES
2016/08/24 Javascript
JS中事件冒泡和事件捕获介绍
2016/12/13 Javascript
bootstrap中添加额外的图标实例代码
2017/02/15 Javascript
微信小程序自定义组件实现tabs选项卡功能
2018/07/14 Javascript
vee-validate vue 2.0自定义表单验证的实例
2018/08/28 Javascript
jQuery 操作 HTML 元素和属性的方法
2018/11/12 jQuery
JS/HTML5游戏常用算法之碰撞检测 包围盒检测算法详解【凹多边形的分离轴检测算法】
2018/12/13 Javascript
记一次vue-webpack项目优化实践详解
2019/02/17 Javascript
使用typescript改造koa开发框架的实现
2020/02/04 Javascript
jQuery实现B2B网站后台管理系统侧导航
2020/07/08 jQuery
node.js基础知识汇总
2020/08/25 Javascript
[01:01]2020完美高校联赛(秋)西安落幕
2021/03/11 DOTA
Python检测QQ在线状态的方法
2015/05/09 Python
Python实现快速排序和插入排序算法及自定义排序的示例
2016/02/16 Python
python 实现将字典dict、列表list中的中文正常显示方法
2018/07/06 Python
在python中利用最小二乘拟合二次抛物线函数的方法
2018/12/29 Python
python中下标和切片的使用方法解析
2019/08/27 Python
python datetime中strptime用法详解
2019/08/29 Python
python3 字符串知识点学习笔记
2020/02/08 Python
使用jupyter notebook将文件保存为Markdown,HTML等文件格式
2020/04/14 Python
2015年幼儿园班主任工作总结
2015/05/12 职场文书
导游词之新疆-喀纳斯
2019/10/10 职场文书
Python读取文件夹下的所有文件实例代码
2021/04/02 Python
nginx的zabbix 5.0安装部署的方法步骤
2021/07/16 Servers
使用Docker容器部署rocketmq单机的全过程
2022/04/03 Servers