2016-10-21 3 views
1

У меня возникла проблема с React-Native, и я работал над этим часами без каких-либо результатов. Ценю вашу помощь.Ошибка присвоения setState экземпляром объекта

Я передаю экземпляр объекта пользователя к компоненту ребенка через штурман компоненты в 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)); 

} 

Я получаю неопределенный в боевой готовности сообщение. Не могли бы вы объяснить это поведение?

Большое вам спасибо за помощь, оцените его.

ответ

0

Из официального docs:

SetState() не сразу мутировать this.state но создает состояние отложенного перехода. Доступ к this.state после вызова этого метода может потенциально вернуть существующее значение.

Это означает, что вы не можете предположить, что this.state.user будет определяться сразу же после вызова setState.

Однако вы можете использовать функцию обратного вызова, чтобы уведомить вас, когда государство было обновлено:

this.setState({ 
    user : newUser 
}, function() { 
    alert(JSON.stringify(this.state.user)); 
}); 
+0

Спасибо большое @FuzzyTree, вы сделали мой день !!! Это правильный ответ – Juve

+0

@ Я рад, что смог помочь :) – FuzzyTree

Смежные вопросы