第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

沒有胖箭頭功能的 JavaScript React setInterval

沒有胖箭頭功能的 JavaScript React setInterval

神不在的星期二 2023-06-15 09:51:28
我開始使用 React,我看到我可以使用 setInterval() 中的粗箭頭函數(shù)設(shè)置一個(gè)時(shí)鐘: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)    }但是我沒有設(shè)法通過常規(guī)函數(shù)(如下)獲得相同的結(jié)果。我認(rèn)為它與在常規(guī)函數(shù)內(nèi)創(chuàng)建新上下文的“this”關(guān)鍵字相關(guān)聯(lián)?我不知道如何解決這個(gè)問題:componentDidMount() {    this.timer = window.setInterval(function() {        this.setState({ date: new Date() })    }, 1000)}感謝您的時(shí)間
查看完整描述

2 回答

?
長風(fēng)秋雁

TA貢獻(xiàn)1757條經(jīng)驗(yàn) 獲得超7個(gè)贊

箭頭函數(shù)自動(dòng)綁定父作用域的上下文。但regular function默認(rèn)情況下不這樣做。為了更改常規(guī)函數(shù)的上下文,您可以使用bind下面示例中的方法。

this.timer = window.setInterval(function() { 
   this.setState({ date: new Date() })
}.bind(this), 1000)


查看完整回答
反對(duì) 回復(fù) 2023-06-15
?
慕虎7371278

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超4個(gè)贊

這不完全是因?yàn)?newthis是為常規(guī)函數(shù)創(chuàng)建的(順便說一句,不要混淆上下文和this),常規(guī)函數(shù)的規(guī)則this是:

  • 在構(gòu)造函數(shù)的情況下是一個(gè)新對(duì)象

  • undefined in functions call in strict mode

  • 如果函數(shù)作為方法調(diào)用,則為當(dāng)前對(duì)象

你的情況是第三種,但訣竅是當(dāng)使用setIntervalor時(shí)setTimeout,回調(diào)函數(shù)作為方法調(diào)用,但在全局范圍內(nèi)(this== window)。

經(jīng)典的方法是保存this在一個(gè)變量中。因?yàn)樵摵瘮?shù)可以訪問創(chuàng)建它的上下文,所以它會(huì)記住這個(gè)變量:

var self = this;

this.timer = window.setInterval(function() {

    self.setState({ date: new Date() })

}, 1000)

您也可以使用bind


查看完整回答
反對(duì) 回復(fù) 2023-06-15
  • 2 回答
  • 0 關(guān)注
  • 146 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)