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