[英]JavaScript React setInterval WITHOUT fat-arrow function
我正在啟動 React,我看到我可以在 setInterval() 中使用粗箭頭函數設置時鍾:
class Clock extends React.Component {
constructor(props) {
super(props)
this.state = { date: new Date() }
this.timer = null
}
componentDidMount() {
this.timer = window.setInterval(() => {
this.setState({ date: new Date() })
}, 1000)
}
但是我沒有設法使用常規函數(如下)獲得相同的結果。 我認為它與在常規函數中創建新上下文的“this”關鍵字有關? 我不知道如何解決這個問題:
componentDidMount() {
this.timer = window.setInterval(function() {
this.setState({ date: new Date() })
}, 1000)
}
感謝您的時間
箭頭函數會自動綁定父作用域的上下文。 但是regular function
默認情況下不會這樣做。 為了更改常規函數的上下文,您可以使用如下示例的bind
方法。
this.timer = window.setInterval(function() {
this.setState({ date: new Date() })
}.bind(this), 1000)
這不正是因為新的this
是一個普通函數創建(順便說一句,不要混淆的背景和this
),規則定期功能, this
包括:
您的情況是第三種情況,但訣竅是在使用setInterval
或setTimeout
,回調函數被稱為方法,但在全局范圍內( this
== window
)。
經典的方式是保存this
一個變量。 因為函數可以訪問創建它的上下文,所以它會記住這個變量:
var self = this;
this.timer = window.setInterval(function() {
self.setState({ date: new Date() })
}, 1000)
您也可以使用bind
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.