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 });
}
添加回答
举报