Reactjs 最后一次反应中的SetTimeout小于预期值
我的应用程序计时器有问题。简而言之,我有一个计时器,它在15秒后通过设置“可见性:false”来更改组件的状态。到现在为止,一直都还不错。 当我在15秒之前调用函数时,问题就出现了。在这种情况下,计时器不会持续15秒,事实上,组件会在几秒钟后消失。 我认为“旧”计时器(可能仍处于活动状态)和“新”计时器之间存在干扰问题。 我该如何避免这种情况?我想定时器是干净的,一旦我调用另一个函数(甚至是同一个),然后再开始超时。 我希望我是清楚的。 为更清楚起见,我附上相关代码部分Reactjs 最后一次反应中的SetTimeout小于预期值,reactjs,Reactjs,我的应用程序计时器有问题。简而言之,我有一个计时器,它在15秒后通过设置“可见性:false”来更改组件的状态。到现在为止,一直都还不错。 当我在15秒之前调用函数时,问题就出现了。在这种情况下,计时器不会持续15秒,事实上,组件会在几秒钟后消失。 我认为“旧”计时器(可能仍处于活动状态)和“新”计时器之间存在干扰问题。 我该如何避免这种情况?我想定时器是干净的,一旦我调用另一个函数(甚至是同一个),然后再开始超时。 我希望我是清楚的。 为更清楚起见,我附上相关代码部分 import Reac
import React,{Component}来自“React”;
类Pubblicita扩展组件{
状态={
索引:0,
IFramesrc:[“/300x250”、“/160x600”、“/468x60”],
高度[25060060],
宽度[300160468],
可见性:错误,
leftSrcs:[115050500],
rightSrcs:[0,0,0],
topSrcs:[10,10500]
};
componentDidMount(){
document.addEventListener(“keydown”,this.onKeyDown.bind(this));
}
组件将卸载(){
document.removeEventListener(“keydown”,this.onKeyDown.bind(this));
}
onKeyDown(事件){
如果(event.keyCode===17){
这个。重载();
}
如果(event.keyCode===96){
this.setState({index:0,visibility:true});
}
如果(event.keyCode===97){
this.setState({index:1,visibility:true});
}
如果(event.keyCode===98){
this.setState({index:2,visibility:true});
}
这个.timer();
}
计时器(){
设置超时(()=>{
this.setState({visibility:false});
}, 15000);
}
重新加载(){
常量iframeLength=this.state.iframeSrcs.length;
if(this.state.index }
是的,你是对的。问题是你没有清除上一个超时。这是如何解决此问题的示例是的,你是对的。问题是你没有清除上一个超时。这是如何在触发新计时器之前解决此问题的示例
timer() {
if (this.timeout) {
clearTimeout(this.timeout);
}
this.timeout = setTimeout(() => {
this.setState({ visibility: false });
}, 15000);
}
在触发新计时器之前先触发旧计时器
timer() {
if (this.timeout) {
clearTimeout(this.timeout);
}
this.timeout = setTimeout(() => {
this.setState({ visibility: false });
}, 15000);
}