Я знаю, что некоторые реагируют, но я застрял в странной ситуации.
У меня есть два входа и кнопка, кнопка должна быть включена, когда оба входа не пусты.Итак, я использовал свойство состояния для каждого входного значения, а также одно свойство, сообщающее мне, имеют ли оба входа значение:
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 просматривает предыдущее состояние, а включенный всегда на один шаг позади, поэтому, если я наберу X первым, а Y вторым,все еще включенный будет ложным.
Мне удалось решить эту проблему, используя setTimeout и заняв в нем вторую строку, но мне это показалось неправильным.
onChange(e){
this.setState({
[e.target.id] : e.target.value,
});
setTimeout(() => {
this.setState({
enabled : ( (this.state.title==='' || this.state.time==='' ) ? false : true)
});
}, 0);
}
Есть ли лучшие решения?