博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
React中的setTimeout、setInterval的注意事项
阅读量:7044 次
发布时间:2019-06-28

本文共 1032 字,大约阅读时间需要 3 分钟。

最近功能需求,在用户输入的一个输入框后,500毫秒触发事件,解决方案很简单,setTimeout嘛......

代码如下:

class A extends React.Component{    handleChange(target){        var that = this;        if(this.timer){            clearTimeout(this.timer);        }        this.timer = setTimeout(setTimeoutFun(that,target),500);            }    setTimeoutFun(_self,_target){        _self.setState({            xxx:_target.value        });        _self.timer = null;    }    render(){        return(                    )    }    }

看似合情合理,但是呢,完全不好用,不是别的不好用,而且完全不会clear,而且每个setTimeout都执行了,这是啥原因呢?想了一想,于是又改了一个写法:

class A extends React.Component{    handleChange(target){        var that = this;        if(this.timer){            clearTimeout(this.timer);        }        this.timer = setTimeout(()=>{            that.setState({                xxx:target.value            });        },500);     }    render(){        return(                    )    }    }

Bingo!!好用了,setInterval也是同样的道理,别忘记clear就好。

解决方法就是不要调用再模块中定义的方法,用匿名函数!!

但是为什么匿名函数就可以,但是在创建的模块中定义的方法就不好用呢?这个原因还在研究,等研究明白了再更新,希望能对大家有帮助!!

转载地址:http://sahal.baihongyu.com/

你可能感兴趣的文章
What's New in iOS7,iOS7新特性介绍
查看>>
电源管理里的休眠选项卡没了
查看>>
Xshell高级后门完整分析报告
查看>>
sphinx是支持结果聚类的
查看>>
PL/SQLDeveloper导入导出Oracle数据库方法
查看>>
救人一命是怎样的体验?
查看>>
php如何妩媚地生成执行的sql语句
查看>>
搜索引擎收录提交入口
查看>>
MongoDB简单实践:Only CRUD
查看>>
C语言杂谈——预处理程序
查看>>
如何从TFS中删除团队项目
查看>>
C++中的指针与引用
查看>>
Java取得操作系统的临时目录
查看>>
Visual Studio 2017 15.5.0 正式发布 正式版下载
查看>>
2.2 Consumer API官网剖析(博主推荐)
查看>>
[转]js日期时间函数(经典+完善+实用)
查看>>
iBATIS In Action:iBATIS的安装和配置
查看>>
endl用法
查看>>
关于Java基本数据类型
查看>>
GUID生成方式
查看>>