#react-native #react-native-android
#react-native
Вопрос:
У меня возникла проблема с React-Native, и я работал над этим в течение нескольких часов без результата. Ценю вашу помощь.
Я передаю экземпляр пользовательского объекта дочернему компоненту через компонент navigator в React-Native
Итак, я определил свой конструктор следующим образом:
constructor (props) {
super(props);
this.state = {
isSpinnerLoading: true,
user : React.PropTypes.instanceOf(User).isRequired
};
}
я заполняю свой пользовательский объект соответствующей информацией, а затем вызываю this.props.navigator . До сих пор все работает идеально.
this.props.navigator.replace({
id: 'RegisterPage',
passProps: {user: this.state.user}
});
Когда я перехожу к компоненту RegisterPage внутри метода componentWillMount (), я отправляю предупреждение для проверки информации, пока все выглядит хорошо.
Но когда я создаю новый экземпляр пользовательского объекта и заполняю его детали и хочу установить setState, как показано ниже, информация о состоянии не загружается
componentWillMount() {
alert(JSON.stringify(this.props.user));
let newUser = new User(this.props.user.getId,
this.props.user.getFirstName,
this.props.user.getLastName,
this.props.user.getFullName,
this.props.user.getProfilePicture,
this.props.user.getEmail,
this.props.user.getAlternativeEmail,
this.props.user.getPassword,
this.props.user.getRole,
this.props.user.getAccessToken);
this.setState({
user : newUser
});
alert(JSON.stringify(this.state.user));
}
Я получаю неопределенное значение в предупреждающем сообщении. Не могли бы вы, пожалуйста, объяснить это поведение
Большое вам спасибо за вашу помощь, ценю это.
Ответ №1:
Из официальных документов:
setState() не изменяет это состояние немедленно, а создает ожидающий переход состояния. Доступ к этому.state после вызова этого метода потенциально может вернуть существующее значение.
Это означает, что вы не можете предполагать, что это this.state.user
будет определено сразу после вызова setState
.
Однако вы можете использовать обратный вызов, чтобы уведомить вас, когда состояние было обновлено:
this.setState({
user : newUser
}, function() {
alert(JSON.stringify(this.state.user));
});
Комментарии:
1. @Juve рад, что смог помочь 🙂