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 相关文章推荐
Extjs显示从数据库取出时间转换JSON后的出现问题
Nov 20 Javascript
Js实现滚动变色的文字效果
Jun 16 Javascript
JS模拟酷狗音乐播放器收缩折叠关闭效果代码
Oct 29 Javascript
Vue.js实战之组件的进阶
Apr 04 Javascript
使用JS编写的随机抽取号码的小程序
Aug 11 Javascript
浅谈AngularJS中使用$resource(已更新)
Sep 14 Javascript
浅谈React Event实现原理
Sep 20 Javascript
vue实现一个炫酷的日历组件
Oct 08 Javascript
微信小程序 弹窗输入组件的实现解析
Aug 12 Javascript
用Angular实现一个扫雷的游戏示例
May 15 Javascript
JavaScript 如何计算文本的行数的实现
Sep 14 Javascript
Nuxt 嵌套路由nuxt-child组件用法(父子页面组件的传值)
Nov 05 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 字符转义 注意事项
2009/05/27 PHP
php在程序中将网页生成word文档并提供下载的代码
2012/10/09 PHP
解决file_get_contents无法请求https连接的方法
2013/12/17 PHP
用PHP代码给图片加水印
2015/07/01 PHP
PHP中session跨子域的三种实现方法
2016/07/25 PHP
如何用ajax来创建一个XMLHttpRequest对象
2012/12/10 Javascript
document.write()及其输出内容的样式、位置控制
2013/08/12 Javascript
jquery SweetAlert插件实现响应式提示框
2015/08/18 Javascript
jQueryeasyui 中如何使用datetimebox 取两个日期间相隔的天数
2017/06/13 jQuery
关于vue-resource报错450的解决方案
2017/07/24 Javascript
angular中子控制器向父控制器传值的实例
2018/10/08 Javascript
为什么说JavaScript预解释是一种毫无节操的机制详析
2018/11/18 Javascript
如何获取vue单文件自身源码路径
2019/05/06 Javascript
JavaScript在web自动化测试中的作用示例详解
2019/08/25 Javascript
原生JS实现留言板功能
2020/02/08 Javascript
[49:41]NB vs NAVI Supermajor小组赛A组 BO3 第一场 6.2
2018/06/03 DOTA
[01:33]PWL开团时刻DAY2-开雾与反开雾
2020/10/31 DOTA
vc6编写python扩展的方法分享
2014/01/17 Python
Python发送form-data请求及拼接form-data内容的方法
2016/03/05 Python
Python中%r和%s的详解及区别
2017/03/16 Python
Python中字典和集合学习小结
2017/07/07 Python
python中利用h5py模块读取h5文件中的主键方法
2018/06/05 Python
Python中利用aiohttp制作异步爬虫及简单应用
2018/11/29 Python
python机器人运动范围问题的解答
2019/04/29 Python
python多线程http压力测试脚本
2019/06/25 Python
Python初学者常见错误详解
2019/07/02 Python
python 线程的五个状态
2020/09/22 Python
python 录制系统声音的示例
2020/12/21 Python
Python 带星号(* 或 **)的函数参数详解
2021/02/23 Python
详解快速开发基于 HTML5 网络拓扑图应用
2018/01/08 HTML / CSS
应届电子商务毕业自荐书范文
2014/02/11 职场文书
集体备课反思
2014/02/12 职场文书
工程技术负责人岗位职责
2015/04/13 职场文书
企业投资意向书
2015/05/09 职场文书
日本读研:怎样写好一篇日本研究计划书?
2019/07/15 职场文书
Python中for后接else的语法使用
2021/05/18 Python