#javascript #reactjs #es6-promise #react-16
#javascript #reactjs #es6-обещание #реакция-16
Вопрос:
У меня есть базовая форма в приложении react 16. После успешной отправки формы я переключаю переменную с false
на true
, а затем хочу отобразить другой div после переключения логического значения.
Вот мое объявление переменной и функция отправки формы:
var formSubmitted = false;
const formObj = {};
const requestInfo = (formObj) => {
formObj.modelNumber = product.modelNumber
submitForm(formObj)
.then(value => {
formSubmitted = true;
console.log(formSubmitted);
}, reason => {
// rejection
});
};
Вот условный HTML:
<div>Always showing</div>
{ !formSubmitted amp;amp;
<div>Form has not been submitted</div>
}
{ formSubmitted amp;amp;
<div>Form submitted successfully</div>
}
Форма успешно отправляется и консоль.журнал показывает, что переменная formSubmitted
была успешно переключена с false
на true
, однако HTML не меняется. Я новичок в react 16 и не уверен, как обновить компонент.
Спасибо.
Комментарии:
1. Вы не можете просто объявить его как обычную переменную, оно должно быть в состоянии. Только изменения состояния и реквизита запускают повторный рендеринг и обновляют DOM в React
Ответ №1:
Хотя переменная of formSubmitted
изменилась, состояние или побочные эффекты не были вызваны, поэтому она не запустила функцию рендеринга React, следовательно, ожидаемые изменения не отражаются на DOM. Вы можете использовать useState
для управления логическим значением formSubmitted
so, чтобы каждое новое назначение вызывало «рендеринг» для обновления пользовательского интерфейса. Вот фрагмент:
const [formSubmitted, setFormSubmitted] = useState(false);
const formObj = {};
const requestInfo = (formObj) => {
formObj.modelNumber = product.modelNumber
submitForm(formObj)
.then(value => {
setFormSubmitted(true);
console.log(formSubmitted);
}, reason => {
// rejection
});
};
...
<div>Always showing</div>
{ !formSubmitted amp;amp;
<div>Form has not been submitted</div>
}
{ formSubmitted amp;amp;
<div>Form submitted successfully</div>
}
И это должно сработать.