Довольно новый для ReactJS.Искал похожую тему безрезультатно.В моем приложении я хочу включить кнопку отправки, только если во всех полях есть содержимое.Все поля ввода связаны с состоянием.
В моей функции обработчика событий onChange:
- Я обновляю состояния, связанные с моими полями, тем самым обновляя поля ввода
- Inв той же функции-обработчике я объявляю логическое значение, основанное на цепочке логических операторов каждого состояния, для которого необходимо значение, используя '&&'
- . Присвойте результат! состоянию с именем buttonDisabled
- ThisЗатем состояние присваивается свойству «disabled» кнопки
- По умолчанию состояние отключенного свойства равно true
Код
onInputChange = (e) => {
e.preventDefault();
const newValue = e.target.value;
const targetElement = e.target.id;
this.setState(() => {
return {
entryInput: newValue,
[targetElement]: newValue
}
})
this.setState( () => {
let buttonState =
(this.state.symbol &&
this.state.contracts &&
this.state.open);
return {
buttonDisabled: buttonState
}
})
}
На моем элементе кнопки:
<Button disabled={this.state.buttonDisabled} onClick={...} ?>
Ожидаемый результат - «Отправить» отключен до тех пор, пока все состояния не содержат значений (т. Е. Все поля имеют значения)
Фактический результат - «Отправить» отключен, но активируется на второмзапись последнего текстового поля, которое я заполняю.
- Я зарегистрировал полученное логическое значение в консоли, и оно соответствует точным условиям
- Кнопка включения / выключения, кажется, является обновлением позади
- ThiУчитывая, что && возвращает логические значения / значения, я явно использовал сравнения с === '' и той же проблемой.Я также попробовал оператор if / else
Возможно, у меня где-то здесь есть логический пробел, но я немного крутил свои колеса, и было бы здорово получить немного помощи.
спасибо