Мне интересно, почему React не обновляет состояние после вызова метода onChange
.
Описание: Простой элемент ввода с двумя плавающими правыми значками для отображения. Один значок для отображения, если длина входного текста равна 0, а другой, если длина входного текста > 0. Но кажется, что React обновляет состояние после того, как я ввожу второй текст в свой элемент ввода.
Мне нужно:
Отображать %
, если длина == 0, и отображать X
, если длина > 0.
А если длина > 0, то пользователь при нажатии X
устанавливает текст ввода == "" ИЛИ input.length = 0.
Проблема в том, что я могу очистить ввод, но значок %
не отображается.
const onChange = (e: any) => {
//setting user input
if (userInput.length > 0)
setDisplayIcon({ default: "d-none", clear: "d-block" });
else setDisplayIcon({ default: "d-block", clear: "d-none" });
};
const clearText = (e: any) => {
setUserInput("");
};
return (
<label id = "default" className = {`${displayIcons.default}`}>
%
</label>
<label className = {`${displayIcons.clear}`} onClick = {clearText}>
X
</label>
);
}
🤔 А знаете ли вы, что...
С JavaScript можно создавать расширения для различных платформ, таких как Adobe Acrobat и Microsoft Office.
Добавить настройку состояния значка отображения:
const clearText = (e: any) => {
setUserInput("");
setDisplayIcon({ default: "d-block", clear: "d-none" });
};
Вы не сможете в console.info обновить значение состояния внутри той же функции. Попробуйте поместить свой console.info вне функции, и вы увидите, что он действительно обновляется.
"setState - это асинхронный вызов, означающий, что если синхронный вызов вызывается, он может не обновляться в нужное время, например, знать текущее значение объекта после обновления с использованием setState, он может не получить текущее обновленное значение на консоли. Чтобы получить некоторое поведение синхронного, необходимо пройти функция вместо объекта для setState». - https://www.geeksforgeeks.org/reactjs-setstate/