学习react优化性能的时候,在render之前,生命周期shouldComponentUpdate里判断前后两次数据是否一致,使用了forEach嵌套if语句,如果满足条件想直接break跳出forEach循环,但事实并没有想的那么简单,代码直接抛出异常。查阅资料原来:

接着想了个一个可以实现的办法,具体代码如下:

 // 生命周期 只有当前后数据不一致时才渲染
shouldComponentUpdate(nextProps,nextState){
var newProducts = nextProps.products;
var beforeProducts = this.props.products
var isRender = false; if(newProducts.length===beforeProducts.length){
try{
newProducts.forEach((data,index)=>{
if(data.name!==beforeProducts[index].name){
isRender = true;
throw Error('need to render')
}
})
}catch(err){ }
}else{
isRender = true
}
return isRender // true or false
}

配合使用try catch,满足条件时throw一个错误来跳出循环。

但实际上这里使用for循环配合break足矣,如下:

 // 生命周期 只有当前后数据不一致时才渲染
shouldComponentUpdate(nextProps,nextState){
var newProducts = nextProps.products;
var beforeProducts = this.props.products
var isRender = false; if(newProducts.length===beforeProducts.length){
for(var i=0;i<newProducts.length;i++){
if(newProducts[i].name!==beforeProducts[i].name){
isRender = true
break;
}
}
}else{
isRender = true
}
return isRender // true or false        
}

提前终止forEach技巧,使用try catch的更多相关文章

  1. forEach 如何提前终止 跳出运行

    forEach 如何提前终止 跳出运行 try{ arr.forEach(function(item,index){ if (...) { foreach.break=new Error(" ...

  2. ES5 forEach()用法和提前终止遍历

    forEach()方法从头到尾的遍历数组,为每个元素调用指定的函数,第一个参数接收的是一个函数,第二个参数是可选的,如果有第二个参数,则调用的函数被看作是第二个参数的方法(第二个参数可以作为第一个调用 ...

  3. js 终止 forEach 循环

    1.因为 forEach() 无法通过正常流程终止,所以可以通过抛出异常的方式实现终止. try{ var array = ["first","second", ...

  4. TFLearn 在给定模型精度时候提前终止训练

    拿来主义:看我的代码,我是在模型acc和验证数据集val_acc都达到99.8%时候才终止训练. import numpy as np import tflearn from tflearn.laye ...

  5. PHP foreach()跳出本次或当前循环与终止循环方法

    PHPforeach()跳出本次或当前循环与终止循环方法 PHP中用foreach()循环中,想要在循环的时候,当满足某个条件时,想 $arr = array('a','b','c','d','e') ...

  6. php中foreach()跳出循环或者终止循环的实现方法

    $arr = array('a','b','c','d','e'); $html = ''; foreach($arr as $key => $value){ if($value=='b'){ ...

  7. php foreach 跳出本次循环/当前循环与终止循环的方法

    PHP中用foreach()循环中,想要在循环的时候,当满足某个条件时,想要跳出本次循环继续执行下次循环,或者满足某个条件的时候,终止foreach()循环,分别会用到:continue 与 brea ...

  8. javascript里面foreach遍历函数介绍,以及跟jquery里面each的区别

    foreach是把数组从头到尾遍历一遍,有三个参数分别是:数组元素,数组索引,数组本身.如果是一个参数,就是数组元素. var data=[1,2,3,4,5,6]; var sum=0; data. ...

  9. forEach 方法 (Array) (JavaScript)

    为数组中的每个元素执行指定操作. 语法 array1.forEach(callbackfn[, thisArg]) 参数 参数 定义 array1 必选.一个数组对象. callbackfn 必选.最 ...

随机推荐

  1. Hdu 1007 最近点对

    题目链接 Quoit Design Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

  2. No.3 Verilog 语言要素

    - 标识符 任意字母.数字."$"和"_"组成,标识符第一个不能是数字. - 注释 ()/*可扩展多行*/ ()//本行结束 - 系统函数 以$字符开始的标识符 ...

  3. IntelliJ Idea 复制粘贴的问题

    分析 尝试从外部复制内容向Idea工作空间内粘贴文件时,有一定的几率会发生复制粘贴失败的问题:复制了新的内容,粘贴的却还是早些时候复制的旧的内容. 我使用的IDEA是最新版(2016.1.3),操作系 ...

  4. oracle触发器——ddl触发器

    什么是ddl(data definition language),说白了就是我们经常用的create.alter和drop这些数据定义语句. n  创建ddl触发器 请编写一个触发器,可以记录某个用户 ...

  5. hdu1527 威佐夫博奕

    有2堆石子,有2个人,每个人可以从一堆取或从2堆取一样的个数的石子,至少取1个.问先手的是胜或输.设(ak,bk)我么成为局势. (0,0)(1,2)(3,5)(4,7)..这种先手必输的叫奇异局势. ...

  6. nginx 做反向代理

    1.Nginx的常用配置大家可以去搜一下,有很多优秀的博客,我这篇文章要实现的需求是: a.根据访问的域名不同,跳转到不同的项目(html首页,80端口) b.拦截访问中所有带有api的请求,转发到后 ...

  7. Python中的TCP三次握手和四次挥手过程

    tcp三次握手和四次挥手 首先先介绍什么是传输层: 1.三次握手 1) 三次握手的详述 首先Client(客户)端发送连接请求报文,Server(服务器)段接受连接后回复ACK报文,并为这次连接分配资 ...

  8. Hbase架构与实现

  9. MapReduce数据流-Reduce

  10. Python基础:24with语句

    一:with语句 在Python 2.6 中正式引入的with语句,是用来简化代码的.这与用try-except 和try-finally所想达到的目的前后呼应.try-except 和try-fin ...