2016-03-19 11 views
0

ログインは毎回最初のルートです。どのようにコールバック関数の結果の初期ルートは、反応ネイティブで決定されますか?

ユーザーのログイン時にタブページを表示したいとします。それ以外の場合は、ログインページに移動します。

class blabla extends Component { 
    constructor(props) { 
     super(props); 
     this.state = { 
     user: null 
     } 
    } 
    componentDidMount(){ 
    var _this = this; 
     FBLoginManager.getCredentials(function(error, data){ 
     if (!error) { 
      _this.setState({ user : data.credentials }); 
     } else { 
      _this.setState({ user : null }); 
     } 
     }); 
    } 
    render() { 
    console.log(this.state.user) 
    // 1. render -> null 
    // 2. render -> data 
    return (
     <NavigatorIOS ref="navigator" 
     style={styles.nav} 
     initialRoute={{ 
      title: "blabla", 
      component: this.state.user != null ? TabPage : Login, 
     }} /> 
    ); 
    } 
} 

この問題を解決し、私は二回ステートメントを使用して、私はES6構文で使用if(!_this.isMounted()) return;を知らないので、ES5するコードES6構文を交換してください。

getInitialState: function(){ 
    return { 
     credentials: undefined, 
     load:true 
    }; 
    }, 


    componentDidMount: function(){ 
    var _this = this; 
    FBLoginManager.getCredentials(function(error, data){ 
     if(!_this.isMounted()) return; 
     if (!error) { 
     _this.setState({ credentials : data.credentials,load:false }); 
     } else { 
     _this.setState({ credentials : false,load:false }); 
     } 
    }); 
    }, 

    render: function() { 
    if (this.state.load) { 
     return <View style={{flex:1,justifyContent:"center"}}><Text style={{textAlign:"center"}}>loading...</Text></View> 
    } 
    return <NavigatorIOS ref="nav" 
     style={{flex:1}} 
     navigationBarHidden={false} 
     rightButtonTitle="Profile" 
     onRightButtonPress= {() => this.left()} 
     initialRoute={{ 
      title: "AnsApp", 
      component: this.state.credentials != undefined && this.state.credentials != false ? TabPage : Profile , 
     }} /> 
    }, 
+1

解決策を質問にではなく回答に入れる必要があります。その後、あなたは答えを受け入れることができ、問題は解決済みとマークされます..... –

答えて

0

希望します。土曜日ですし、私のポートフォリオを頑張っていますが、私はいくつかの改善を行い、いくつかの部分を明確にしました。あなたにご質問がある場合はお気軽にお問い合わせください。スマイリー:

class blabla extends Component { 
    constructor(props) { 
     super(props); 
     this.state = { 
     user: null , 
     loggedInn: !true 
     } 
    } 
    componentDidMount(){ 
    var _this = this; 
     FBLoginManager.getCredentials(function(error, data){ 
     if (this.state.loggedInn = !true) { 
      _this.setState({ user : data.credentials }); 
     } 
      return this.state; 
     }); 
    }, 
    Logon() { 
    // your this.state validation 
    } 
    render() { 
    console.log(this.state.user) 
    // 1. render -> null 
    // 2. render -> data 
    return (
     <NavigatorIOS ref="navigator" 
     style={styles.nav} 
     initialRoute={{ 
      title: "blabla", 
      component: this.state == Logon ? TabPage : Login, 
     }} /> 
    ); 
    } 
} 
関連する問題