4 回答

TA貢獻1893條經驗 獲得超10個贊
有趣的問題 簡短的回答:沒有問題 詳細的回答:當您設置超時或間隔時,會返回一個 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

TA貢獻1828條經驗 獲得超3個贊
將 setTimeout 放在 componentDidMount 內部并在 componentWillUnmount 上清除它就可以了。
componentDidMount() {
if(this.props.submitted === 'SUCCESS') {
timer1 = setTimeout(() => {
this.props.history.push('/');
}, 5000)
}
}
componentWillUnmount() {
clearTimeout(timer1);
}

TA貢獻1786條經驗 獲得超11個贊
這里需要注意幾點:
setTimeout 返回一個唯一的值
timeoutId
,這就是您所看到的顯示內容。你不應該將 setTimeout 放在渲染函數內部,也不應該放在從功能組件返回的 jsx 中,因為每次組件重新渲染時,你都會再次調用 setTimeout,這可能不是你想要的結果。
useEffect
相反,對于功能組件,請將 setTimeout 放在 a 內部,或者componentDidMount
對于類組件,將 setTimeout 放在 a 內部。
添加回答
舉報