Я создаю приложение для распознавания изображений и хочу использовать кнопки для изменения состояния. Мне удалось изменить некоторые поля, но я столкнулся со странной проблемой. Я настроил его таким образом, что поле выбирается с помощью колеса выбора, а его значение состояния устанавливается в текст самой последней нажатой кнопки. Однако только два из пяти полей обновляются должным образом, несмотря на то, что все пять блоков кода практически идентичны.
До сих пор я пытался перемещать 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, но я не понимаю, почему он будет обновлять одни поля, а не другие. Я не получаю никаких сообщений об ошибках, просто неверный вывод. Любая помощь будет принята с благодарностью!
state.selectedItem
, поэтому я не знаю, почему вы ожидаете, что оба оператораif
сработают. - person VLAZ   schedule 12.06.2019