Я только что начал играть с «реактивным родным», и у меня проблема с тем, что функции не ждут ответов, прежде чем продолжить.
Итак, в Chrome мой журнал консоли отображает:
userStore
это состояние содержимого
возвращенные данные из api / userstore [объект объекта]
По существу, getUserDetails выполняется и в это время, пока вызывается API.Функция setData запускается и завершается до того, как будет возвращен результат API.
Я бы хотел, чтобы функция getUserDetails завершилась до вызова setData.
Я просматривал ресурсы в Интернете, но затрудняюсь.Код, который я использую, приведен ниже (он был сокращен для простоты чтения. Примечание. Я использую mobx)
UserScreen.js
constructor (props) {
super(props);
this.state = {
data: null
};
}
async componentDidMount() {
this.props.commonStore.setLoading(true);
await this.props.userStore.getUserDetails('1');
this.setData();
this.props.commonStore.setLoading(false);
}
setData() {
this.setState({
userDetails: this.props.userStore.userDetails
});
console.log('userStore' + this.props.userStore.userDetails)
console.log('this state contents '+ this.state.userDetails);
}
render () {
if(this.props.commonStore.isLoading===false) {
return (<View><Text>Ready!!</Text></View>)
}else{}
return (<View><Text>Loading</Text></View>)
}
}
UserStore.js
@action getUserDetails = (userID) => {
axios.get('http://192.168.1.9/user/' + userID)
.then(response => {
console.log('returned data from api / userstore ' +response.data.user);
this.userdetails = response.data.user;
}).catch(error => {
console.log(error);
this.error = error
}) }
Спасибо