2016-12-23 61 views
0

我試圖開始反應。檢查了代碼示例後,我遇到了一件非常奇怪的事情。這是鏈接[React tutorial]。這是生命週期部分的代碼;-js-反應「組件確實掛載」示例

componentDidMount() { 
this.timerID = setInterval(
() => this.tick(), 
    1000 
); 
} 

那麼,在設置爲什麼使用箭頭函數的時間間隔?我嘗試了其他方式(this.tick()本身),但它沒有按預期工作。

+2

[箭頭函數不會重新綁定'this'。](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/Arrow_functions #No_binding_of_this) –

+0

謝謝了! –

回答

1

的setInterval需要傳遞一個函數引用,所以你可以寫

setInterval(() => this.tick(), 1000 ); 

這不運行this.tick,它只是告訴setInterval的時候選擇運行打勾。箭頭函數將「this」綁定爲您的組件。

然而setInterval( function() { this.tick(); }, 1000 );不綁定這是您的組件,所以你需要寫setInterval(this.tick.bind(this), 1000 );

如果你寫 setInterval( this.tick(), 1000 );它傳遞給setInterval之前然後勾選運行,並剔的返回值是什麼將由setInterval使用。

我希望清楚。 setInterval只是想引用該函數:)

+0

-this.tick()和-this.tick-之間沒有區別。我想這是因爲丹王子所說的。這被視爲一個全局對象,所以它不能訪問「this」事物:d感謝人們! –

+0

哦,是的,this.tick不會工作,如果在setInterVal中調用,因爲當setInterval調用this.tick時,它使用setInterval內的上下文。所以這不會是你的組件,但它會是setInterval所處的任何上下文。 –