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 ,
}} />
},
你应该把你的解决方案在答案,而不是问题。然后你可以接受答案,问题将被标记为已解决..... –