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中的$.getJSON 使用说明
Mar 10 Javascript
单击按钮显示隐藏子菜单经典案例
Jan 04 Javascript
小米公司JavaScript面试题
Dec 29 Javascript
Angularjs编写KindEditor,UEidtor,jQuery指令
Jan 28 Javascript
jquery判断当前浏览器的实现代码
Nov 07 Javascript
简单实现js点击展开二级菜单功能
May 16 Javascript
Vue.js列表渲染绑定jQuery插件的正确姿势
Jun 29 jQuery
Js判断H5上下滑动方向及滑动到顶部和底部判断的示例代码
Nov 15 Javascript
JavaScript实现动态添加、移除元素或属性的方法分析
Jan 03 Javascript
深入了解JavaScript 防抖和节流
Sep 12 Javascript
vue商城中商品“筛选器”功能的实现代码
Jul 01 Javascript
js实现自定义滚动条的示例
Oct 27 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一次性删除前台checkbox多选内容的方法
2013/09/22 PHP
PHP函数addslashes和mysql_real_escape_string的区别
2014/04/22 PHP
php实现session自定义会话处理器的方法
2015/01/27 PHP
PHP自定义函数格式化json数据示例
2016/09/14 PHP
ThinkPHP like模糊查询,like多匹配查询,between查询,in查询,一般查询书写方法
2018/09/26 PHP
用YUI做了个标签浏览效果
2007/02/20 Javascript
javascript GUID生成器实现代码
2009/10/31 Javascript
Dojo 学习笔记入门篇 First Dojo Example
2009/11/15 Javascript
JavaScript 函数replace深入了解
2013/03/14 Javascript
JavaScript 垃圾回收机制分析
2013/10/10 Javascript
js购物车实现思路及代码(个人感觉不错)
2013/12/23 Javascript
Javascript 一些需要注意的细节(必看篇)
2017/07/08 Javascript
[js高手之路]HTML标签解释成DOM节点的实现方法
2017/08/31 Javascript
基于ES6 Array.of的用法(实例讲解)
2017/09/05 Javascript
React-router4路由监听的实现
2018/08/07 Javascript
原生js实现3D轮播图
2020/03/21 Javascript
js实现手表表盘时钟与圆周运动
2020/09/18 Javascript
[00:23]DOTA2群星共贺开放测试 25日无码时代来袭
2013/09/23 DOTA
[01:20]PWL开团时刻DAY9——听说潮汐没用?
2020/11/10 DOTA
深入理解Python 代码优化详解
2014/10/27 Python
python实现最长公共子序列
2018/05/22 Python
对numpy中的数组条件筛选功能详解
2018/07/02 Python
Python lambda表达式用法实例分析
2018/12/25 Python
在python中使用requests 模拟浏览器发送请求数据的方法
2018/12/26 Python
三步实现Django Paginator分页的方法
2019/06/11 Python
python django model联合主键的例子
2019/08/06 Python
tensorflow指定GPU与动态分配GPU memory设置
2020/02/03 Python
jupyternotebook 撤销删除的操作方式
2020/04/17 Python
Tensorflow tf.tile()的用法实例分析
2020/05/22 Python
Python中flatten( ),matrix.A用法说明
2020/07/05 Python
微软日本官方网站:Microsoft日本
2017/11/26 全球购物
小区推广策划方案
2014/06/06 职场文书
党员评议表自我评价范文
2014/10/20 职场文书
第二批党的群众路线教育实践活动个人整改方案
2014/10/31 职场文书
2015年环卫工作总结
2015/04/28 职场文书
离婚民事起诉状
2015/08/03 职场文书