2016-10-21 46 views
1

我遇到了React-Native的問題,並且我一直在爲此工作數小時而沒有任何結果。感謝你的幫助。問題分配setState與對象的實例

我傳遞一個用戶對象實例的子組件,通過導航組件在陣營本地

所以,我定義我的構造函數如下:

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

@Juve很高興我可以幫忙:) – FuzzyTree