2016-03-19 18 views
0

登录是每次的第一条路线。如何在原生反应中确定回调函数的结果初始路由。

我想在用户登录时显示tabpage。否则,我想导航到登录页面。

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语法ES5,因为我不知道在ES6语法使用if(!_this.isMounted()) return;

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, 
     }} /> 
    ); 
    } 
} 
相关问题