React中的setTimeout、setInterval的注意事项

最近功能需求,在用户输入的一个输入框后,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(
            <input onChange={this.handleChange} xxxxxx />
        )
    }
    
}

看似合情合理,但是呢,完全不好用,不是别的不好用,而且完全不会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(
            <input onChange={this.handleChange} xxxxxx />
        )
    }
    
}

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值