2016-03-06 68 views
1

我發現如何取消Javascript的超時,但我怎樣才能取消定時器混合?推薦使用Timermixin與JavaScript超時的React Native一起使用。React本機timemixin取消定時器超時

var TimerMixin = require('react-timer-mixin'); 

this.setTimeout(() => {this.setState({results: ' '})}, 1800) 

我需要有其他動作的執行它取消。

回答

1

解決方案

var clearId = this.setTimeout(() => {this.setState({results: ' '})}, 1800); 
this.setState({ clearId: clearId}); 

...某處後,當你要取消的setTimeout調用

this.clearTimeout(this.state.clearId) 

說明

可以取消它以同樣的方式你會定期setTimeout,通過使用clearTimeout。如果函數尚未被調用,clearTimeout將阻止函數運行。

當setTimeout的被調用時,它「返回表示所設置的定時器的ID值的數。使用此值與clearTimeout()方法來取消計時器。http://www.w3schools.com/jsref/met_win_settimeout.asp

由於我想象你要調用clearTimeout在一個單獨的功能,您可以將clearId存儲爲狀態屬性,因此它可以很容易地在後面一個單獨的函數引用。

如果想了解更多關於定時器在本地做出反應,我發現這個文檔有用https://facebook.github.io/react-native/docs/timers.html

另外

通過使用TimerMixin(而不是常規的setTimeout方法),setTimeout調用將被自動如果組件卸除防止。很有用!這就是爲什麼你應該確保使用TimerMixin而不是普通的Timer方法。

「我們發現,在應用與創造是嚴重錯誤的主要原因陣營母語是由於計時器燒成後的組件已卸載。」 https://facebook.github.io/react-native/docs/timers.html

TimerMixin將避免這種情況,並確保組件卸載時清除所有定時器調用。