我正在用React構建一個小遊戲,並且我設置了一個倒數計時器。React--點擊一個按鈕後,計時器開始計時秒數
關於如何使用React創建計時器或倒數計時器,有許多教程(包括React官方文檔中的一個)。但它們都使用componentDidMount
和componentWillUnmount
生命週期方法來設置和分別清除間隔。
這工作正常,但定時器開始計算組件掛載的時刻。我想有一個計時器,開始計算onClick。
什麼是實現這種行爲的合適的生命週期方法?我已經試過componentWillUpdate
和componentDidUpdate
但沒有效果。
我的第一個想法是使用gameOn狀態屬性爲了激活計時器只有當遊戲開啓(即開始按鈕已被按下),但這不起作用,因爲(我猜)我設置gameOn爲真,在組件didMount之後很久。
我也試圖在Timer組件上隨同適當的狀態({secondsElapsed:0})一起移動這兩個方法,因爲Timer是一個獨立的組件,通過道具與其父組件通信。這也沒有運氣。
最後,我嘗試在我的構造函數上設置this.interval = null;
,但這在Timer的運行方式上沒有任何區別。
我在想這個問題的根源是生命週期方法,因爲這些控件在調用setInterval和clearInterval的時候會被調用。所以我的問題是這樣的:
我應該使用哪種生命週期方法的其他組合來實現我所追求的行爲?
任何精通的建議將不勝感激。
獎勵積分,如果你能清楚地解釋爲什麼我應該在構造函數中聲明this.interval = null;
。
爲了什麼我到目前爲止的例子,確實基本上看「A Stateful Component」
您可以隨時啓動的時間間隔你只想不要忘記清除它們的任何方式。在反應生命週期中,清理事物的最佳位置是在'componentWillUnmount'期間。爲什麼?因爲你想確保時間間隔一直被清除。 – Jalil
等一下,不會這樣的情況與componentDidUpdate以及? – alexandros84
這不是一個理想的地方,因爲組件更新的因素很多。可能您希望它通過事件(onClick)或卸載時觸發/清除。 – Jalil