rn中&&导致的死循环

需求:
要做一个批处理的列表,选中的item状态改变 并且提交到后台,刷新界面。
bug:
这个bug比较奇葩,会导致死循环。


xunhuan.png

代码:

    renderItem = ()=>{
        if(!this.state.list){
            return null;
        }
        let arr = [];
        for(let i=0;i)
        }
        return arr;
    };

fix:
给数组一个初始化,删除&&这个就好。

    renderItem = ()=>{
        if(!this.state.list){
            return null;
        }
        let arr = [];
        for(let i=0;i)
        }
        return arr;
    };

原因:
为了寻找原因执行如下代码

   console.log('this.state.arr&&this.state.arr.length',this.state.arr&&this.state.arr.length);
        let index = 1;
        if(index

打印


rn中&&导致的死循环_第1张图片
log.png

发现

 if(index

这个比较是不正确的。
然后再次修改执行这段代码

   console.log('this.state.arr&&this.state.arr.length',this.state.arr&&this.state.arr.length);
        let l = this.state.arr&&this.state.arr.length;
        let index = 1;
        if(index

这样就可以正常比较了


rn中&&导致的死循环_第2张图片
log2.png

总结:
当在循环中使用&&判断是否为空时最好小心,
可以使用初始化代替 护着使用变量赋值的方式代替。

你可能感兴趣的:(rn中&&导致的死循环)