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

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

setState回調(diào)不等待狀態(tài)更新

setState回調(diào)不等待狀態(tài)更新

慕工程0101907 2023-11-02 17:27:48
我有這段代碼:    handleMaxLevel = event => {    this.setState({      maxLevel: event.target.value    }, (minLevel, maxLevel) => {      let filter = this.state.filteredPlayers.filter(players => {        return players.level > minLevel && players.level < maxLevel      })      this.setState({        levelFilteredPlayers: filter      })    })  }我在這段代碼上調(diào)用這個(gè)函數(shù): <TextField        id="standard-number"        label="Highest level"        type="number"        onChange={() => this.handleMaxLevel(this.state.minLevel, this.state.maxLevel)}        InputLabelProps={{          shrink: true,        }}  />我得到的事情是: TypeError: Cannot read property 'value' of undefined它說問題出在這一行: maxLevel: event.target.value 。我不明白,回調(diào)不是應(yīng)該等待第一個(gè) setstate 結(jié)束才能執(zhí)行嗎?為什么它不重新調(diào)整設(shè)置為 maxLevel 狀態(tài)的值?
查看完整描述

2 回答

?
守候你守候我

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

你的語法不正確。當(dāng)您調(diào)用時(shí),handleMaxLevel您應(yīng)該向其傳遞事件對(duì)象。并且setState回調(diào)不需要任何參數(shù),它已經(jīng)可以訪問更新的狀態(tài)。所以你的onChange處理程序應(yīng)該是這樣的:


onChange={handleMaxLevel} // If we pass function directly, it will be given the event argument by default

然后在setState回調(diào)中直接引用狀態(tài)值,因?yàn)樵诨卣{(diào)中它們將被更新:


handleMaxLevel = event => {

    this.setState({

        ...this.state,

        maxLevel: event.target.value

    }, () => {

        let filter = this.state.filteredPlayers.filter(players => {

            return players.level > this.state.minLevel && players.level < this.state.maxLevel

        })

        this.setState({

            ...this.state,

            levelFilteredPlayers: filter

        })

    })

}

編輯:我相信您也需要傳播舊狀態(tài),以防止值丟失。另外,最好在一次setState調(diào)用中完成所有這些操作,而不是使用回調(diào)


查看完整回答
反對(duì) 回復(fù) 2023-11-02
?
Smart貓小萌

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

這里出了問題是你的函數(shù)需要一個(gè)參數(shù)


const handleMaxLevel = event => {

// ...

}

但是,您的調(diào)用正在發(fā)送兩個(gè)參數(shù)


onChange={() => this.handleMaxLevel(this.state.minLevel, this.state.maxLevel)}

如果您想更改函數(shù)以接受事件和狀態(tài)變量變量:


// Change invocation like so:

onChange={event => this.handleMaxLevel(event, this.state.minLevel, this.state.maxLevel)}


// Change function definition like so:

const handleMaxLevel = (event, minLevel, maxLevel) => {

// ...

}

但是,由于您只是在函數(shù)內(nèi)使用狀態(tài)屬性,因此您甚至不需要顯式傳遞它們:


onChange={e => this.handleMaxLevel(e)}

這會(huì)讓你的函數(shù)看起來像這樣:


const handleMaxLevel = event => {

    // access state attributes like this:

    const {minLevel, maxLevel} = this.state;

    // and now you also have access to the event value

    this.setState({ maxValue: e.target.value });

}


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

添加回答

舉報(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)