2 回答

TA貢獻1802條經驗 獲得超10個贊
你的語法不正確。當您調用時,handleMaxLevel您應該向其傳遞事件對象。并且setState回調不需要任何參數,它已經可以訪問更新的狀態。所以你的onChange處理程序應該是這樣的:
onChange={handleMaxLevel} // If we pass function directly, it will be given the event argument by default
然后在setState回調中直接引用狀態值,因為在回調中它們將被更新:
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
})
})
}
編輯:我相信您也需要傳播舊狀態,以防止值丟失。另外,最好在一次setState調用中完成所有這些操作,而不是使用回調

TA貢獻1911條經驗 獲得超7個贊
這里出了問題是你的函數需要一個參數
const handleMaxLevel = event => {
// ...
}
但是,您的調用正在發送兩個參數
onChange={() => this.handleMaxLevel(this.state.minLevel, this.state.maxLevel)}
如果您想更改函數以接受事件和狀態變量變量:
// 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) => {
// ...
}
但是,由于您只是在函數內使用狀態屬性,因此您甚至不需要顯式傳遞它們:
onChange={e => this.handleMaxLevel(e)}
這會讓你的函數看起來像這樣:
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 });
}
添加回答
舉報