Я создаю приложение для распознавания изображений и хочу использовать кнопки для изменения состояния. Я успешно изменил некоторые поля, но столкнулся со странной проблемой. У меня он настроен так, что поле выбирается с помощью колесика выбора, а его значение состояния устанавливается на текст самой последней нажатой кнопки. Однако только два из пяти полей обновляются, как и ожидалось, несмотря на то, что все пять кодовых блоков практически идентичны.
До сих пор я пытался переместить setState, переместить вызовы внутри каждого setState, сделать асинхронную функцию onPressHide и много журналов консоли.
this.state = {
selectedItem : 4,
itemList : ['Serial #', 'Manufacturer', 'Model', 'Model #', 'Manufacture Date'],
uri : null,
show : false,
current : null,
currentText: "",
serial: "",
manufac: "",
model: "",
modelNum: "",
manuDate: "",
assetId: "",
};
onPickerSelect (index) {
this.setState({
selectedItem: index,
})
}
onPressHide() {
if (this.state.selectedItem == 0) {
this.setState((state) => ({
serial: state.currentText,
show: false,
}));
Alert.alert(
'Update',
"Serial number will be updated to: " + this.state.currentText,
[
{text: 'OK', onPress: () => console.log('OK Pressed')},
],
{cancelable: false},
);
}
if (this.state.selectedItem == 1) {
this.setState((state) => ({
manufac: state.currentText,
show: false,
}));
Alert.alert(
'Update',
"Manufacturer will be updated to: " + this.state.currentText,
[
{text: 'OK', onPress: () => console.log('OK Pressed',)},
],
{cancelable: false},
);
}
onPressSubmit() {
var finalArr = {serial: this.state.serial, manufac: this.state.manufac, model: this.state.model, modelNum: this.state.modelNum, manuDate: this.state.manuDate};
this.props.updateAll(finalArr);
}
Data: {Serial: "", Manufacturer: "", Model: "Sonicare", ModelNumber: "", ManufactureDate: ""}
Последняя строка из журнала консоли сервера при попытке установить Philips в качестве производителя и Sonicare в качестве модели. Верхний оператор if в приведенном выше коде onPressHide является функциональным, а нижний - нет. Я предполагаю, что это как-то связано с асинхронной природой setState, но я не совсем понимаю, почему он будет обновлять некоторые поля, а не другие. Я не получаю никаких сообщений об ошибках, просто неверный вывод. Любая помощь будет принята с благодарностью!