在重定向之前,我在渲染方法中调用一个setTimeout来显示一条消息几秒钟,除了一个随机整数外,其他一切都正常工作,我假设它是收到的setTimout Id。如何从显示中删除此号码/id?
if(this.props.submitted === 'SUCCESS') {
return (
<div>
...
...
<div className="...">
{
setTimeout(() => {
this.props.history.push('/');
}, 20000);
}
</div>
</div>
)
} else {
.....
}
只需在返回之前执行setTimeout
这里需要注意的几件事:
- setTimeout返回一个唯一的
timeoutId
,它就是您所看到的显示内容 - 您不应该将setTimeout放在渲染函数中,也不应该放在函数组件返回的jsx中,因为每次组件重新渲染时,您都会再次调用setTimeout,这可能不是您想要的结果。相反,将setTimeout放在函数组件的
useEffect
内,或放在类组件的componentDidMount
内
有趣的问题简短回答:没有问题长答案:当您设置超时或间隔时,会返回一个id(是的,这个数字(。为什么返回id?能够清除超时或间隔。让我给你看一个返回id 的例子
var timer1=setTimeout(()=>{
console.log("this message will never show")
},10000)//10 seconds
var i=1
var interval1=setInterval(()=>{
console.log(i)
if(i>7){
console.log("sikeee, I END IT NOW")
clearTimeout(timer1)
clearInterval(interval1)
}i++
},1000)//1 second
将setTimeout放入componentDidMount中并在componentWillUnmount上清除它就成功了。
componentDidMount() {
if(this.props.submitted === 'SUCCESS') {
timer1 = setTimeout(() => {
this.props.history.push('/');
}, 5000)
}
}
componentWillUnmount() {
clearTimeout(timer1);
}