亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

渲染 React 組件時,為什么 setTimout 在超時時間內在瀏覽器中顯示隨機整數以及如何解

渲染 React 組件時,為什么 setTimout 在超時時間內在瀏覽器中顯示隨機整數以及如何解

白板的微信 2023-07-06 14:58:15
我在渲染方法中調用 setTimeout 來在重定向之前顯示一條消息幾秒鐘,并且一切正常,除了一個隨機整數(我假設它是收到的 setTimout Id)。如何刪除此號碼/ID 的顯示?if(this.props.submitted === 'SUCCESS') {   return (     <div>        ...        ...        <div className="...">        {          setTimeout(() => {            this.props.history.push('/');            }, 20000);          }        </div>     </div>   )} else {    .....}
查看完整描述

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


查看完整回答
反對 回復 2023-07-06
?
倚天杖

TA貢獻1828條經驗 獲得超3個贊

將 setTimeout 放在 componentDidMount 內部并在 componentWillUnmount 上清除它就可以了。


componentDidMount() {


  if(this.props.submitted === 'SUCCESS') {

    timer1 = setTimeout(() => {

               this.props.history.push('/');

             }, 5000)

  } 

}


componentWillUnmount() {

  clearTimeout(timer1);

}


查看完整回答
反對 回復 2023-07-06
?
Qyouu

TA貢獻1786條經驗 獲得超11個贊

這里需要注意幾點:

  1. setTimeout 返回一個唯一的值timeoutId,這就是您所看到的顯示內容。

  2. 你不應該將 setTimeout 放在渲染函數內部,也不應該放在從功能組件返回的 jsx 中,因為每次組件重新渲染時,你都會再次調用 setTimeout,這可能不是你想要的結果。useEffect相反,對于功能組件,請將 setTimeout 放在 a 內部,或者componentDidMount對于類組件,將 setTimeout 放在 a 內部。


查看完整回答
反對 回復 2023-07-06
?
慕絲7291255

TA貢獻1859條經驗 獲得超6個贊

只需在返回之前執行 setTimeout



查看完整回答
反對 回復 2023-07-06
  • 4 回答
  • 0 關注
  • 200 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號