我了解一些React,但目前卡在一个奇怪的情况下。
我有两个输入框和一个按钮, 当两个输入框都有值时,按钮应该启用。 因此,我为每个输入框的值使用了一个状态属性,并且还使用了一个属性来告诉我这两个输入框是否都有值:
this.state = {
title: '',
time :'',
enabled : false
}
此外,我为每个输入框添加了onChange事件来相应地设置状态:
<input type="text" id="time" name="time" onChange={this.onChange.bind(this)} value={this.state.time}></input>
<input type="text" id="title" name="title" onChange={this.onChange.bind(this)} value={this.state.title}></input>
而onChange就像这样
onChange(e){
this.setState({
[e.target.id] : e.target.value,
enabled : ( (this.state.title==='' || this.state.time==='' ) ? false : true)
});
}
问题在于setState查看先前的状态,而enabled始终落后一步,因此如果我在第一行输入X,在第二行输入Y,enabled仍将为false。
我通过使用setTimeout并将第二行放入其中来解决它,但我觉得这样做不正确。
onChange(e){
this.setState({
[e.target.id] : e.target.value,
});
setTimeout(() => {
this.setState({
enabled : ( (this.state.title==='' || this.state.time==='' ) ? false : true)
});
}, 0);
}
还有更好的解决方案吗?