Проблема с присвоением setState экземпляру объекта

#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 рад, что смог помочь 🙂