Нечто очень странное происходит. У меня есть значение состояния, которое определяется следующим образом:
const [heightField, setHeightField] = useState<FormField<string>>(new FormField<string>(""));
Я также определил хук useEffect, связанный с этим значением состояния, он определяется следующим образом:
useEffect(() => console.log('heightfield changed, hi from the useEffect hook!'), [heightField]);
На это значение heightField ссылаются в текстовом поле следующим образом:
<TextField
required
label="Height (cms)"
margin="normal"
variant="outlined"
type="number"
value={heightField.value}
onChange={(event) => {
setHeightField(new FormField<string>(event.target.value))
}}
error={heightField.error}
helperText={heightField.errorMessage}
/>
Теперь, когда я вводю текст в текстовое поле, значение heightField соответствующим образом обновляется, и также запускается ловушка useEffect.
Однако при обновлении значения heightField из другой функции его значение не обновляется, а также не запускается ловушка useEffect. Честно говоря, я не понимаю, почему такое поведение происходит. Функция следующая:
const validateHeight = (heightField: FormField<string>) => {
const heightNumber = parseInt(heightField.value);
let error = false;
let errorMessage = "";
if (!heightNumber) {
error = true;
errorMessage = "Wrong number, please verify.";
}
else if (heightNumber < 0 || heightNumber > 220) {
error = true;
errorMessage = "Please verify the height";
}
const nHeightField = new FormField<string>(heightField.value, error, errorMessage);
setHeightField(nHeightField);
}
Эта функция вызывается при нажатии кнопки отправки формы и при ее вызове ловушка useEffect не запускается и значение высоты heightField также не обновляется соответствующим образом
Есть что-то, чего мне не хватает? почему это значение не обновляется при вызове функции обновления с новым объектом?