【发布时间】:2019-03-20 16:41:15
【问题描述】:
我知道有些反应,但我陷入了一个奇怪的境地。
我有两个输入和一个按钮, 当两个输入都不为空时,应启用该按钮。 所以,我为每个输入值使用了一个 state 属性,还有一个属性告诉我两个输入是否都有值:
this.state = {
title: '',
time :'',
enabled : false
}
我也为每个输入设置了一个 onChange 来相应地设置 State:
<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 查看之前的状态,而 enable 总是落后一步,所以如果我在第一个输入 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);
}
有更好的解决方案吗?
【问题讨论】:
标签: javascript reactjs setstate