У меня есть touchableOpacity область с изображением внутри нее. Я хочу сделать так, чтобы когда пользователь щелкал изображение, устанавливал непрозрачность touchableOpacity на 0,2, а затем выполнял выборку, которая в результате получит 0 или 1. Если 0, изменить изображение на черно-белое, иначе цветное изображение. Но я не смог зайти так далеко. Не могу найти причину, по которой, когда я щелкаю область touchableOpacity, console.info печатает в консоли свое значение, но не устанавливает state.opacity.
import React, { Component } from 'react';
import {Image, TouchableOpacity, View, Text, StyleSheet, StatusBar } from 'react-native';
import styles from './Estilos';
export default class LightsContainer extends Component {
constructor() {
super();
this.state = { opacity: 0.9 };
}
onPress = () => {
fetch("http://192.168.0.161/switch.php?port=1")
.then(response => response.text())
.then((dataStr) => {
console.info(dataStr);
if (dataStr == 1){
this.setState({opacity: 0.9});
console.info("si");
} else {
this.setState({opacity: 0.2});
console.info("no");
}
});
console.info(this.state);
}
render() {
return (
<View style = {{flex: 1}}>
<View style = {{flex: 1, backgroundColor: 'steelblue', justifyContent: 'center', alignItems: 'center'}} >
<TouchableOpacity style = {{opacity: this.state.opacity}} onPress = {this.onPress.bind(this)} >
<Image source = {require('./bulb-512.png')} style = {{width: 150, height: 150, top:-40}} />
</TouchableOpacity>
<TouchableOpacity style = {styles.button} >
<Image source = {require('./bulb-512.png')} style = {{width: 150, height: 150, top:-10}} />
</TouchableOpacity>
<TouchableOpacity style = {styles.button} >
<Image source = {require('./bulb-512.png')} style = {{width: 150, height: 150, top:20}} />
</TouchableOpacity>
</View>
</View>
);
}
}



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Журнал консоли будет происходить почти сразу, поскольку JavaScript является синхронным языком.
Прежде чем выборка будет возвращена (пока данные все еще поступают), console.info(this.state) уже произойдет, поэтому последняя строка onPress будет регистрировать начальное состояние. Имейте также в виду, что Сам метод setState React является асинхронным!, поэтому журналы для si и no могут не появиться после завершения setState.
Чтобы исправить это, вы можете заглянуть в асинхронный/ожидающий синтаксис, который позволит вашему асинхронному коду работать «синхронно», ожидая разрешения промисов.