我的第一個React項目。我想要做的是首先顯示徽標,然後檢查用戶是否登錄。如果是,他們直接進入下一頁。如果不是登錄表單出現在同一頁面的徽標下方。與Facebook應用在打開時的工作方式類似。反應本機和firebase:如何登錄後如何顯示登錄表單?
我得到了什麼至今使用火力地堡進行身份驗證:
loginCheck(){
const { navigate } = this.props.navigation;
firebase.auth().onAuthStateChanged(function(user) {
if (user) {
navigate('Feed');
} else {
return (
<View style={styles.formContainer}>
<FormLabel>Email</FormLabel>
<FormInput
onChangeText={(email) => this.setState({ email })}/>
<FormLabel>Password</FormLabel>
<FormInput
secureTextEntry
onChangeText={(password) => this.setState({ password })}/>
<Text style={styles.statusText}>{ this.state.error }</Text>
{this.renderButtonOrLoading()}
</View>
)
}
});
}
render() {
return (
<KeyboardAvoidingView behavior="padding" style={styles.container}>
<View style={styles.loginContainer}>
<Image resizeMode="contain" style={styles.logo} source={require('../../components/images/logo.png')} />
</View>
{this.loginCheck()}
</KeyboardAvoidingView>
);
}
}
目的是讓一切的loginCheck()
的return
聲明顯示在渲染,如果用戶沒有登錄我知道我的做法是錯誤的,只是不知道如何去解決它。
的renderButtonOrLoading()
看來,做工精細,但是當我在render()
用的loginCheck()
的return
聲明一切替換{this.loginCheck()}
。
renderButtonOrLoading(){
if(this.state.loading){
return (<Text style={styles.statusText}>Loading</Text>);
}
return (
<View>
<Button
onPress={this.onLoginPress.bind(this)}
title='Login'/>
<Button
onPress={this.onSignupPress.bind(this)}
title='Sign Up'/>
</View>
);
}
希望得到任何幫助,一直困住這個問題一段時間。
似乎得到一個錯誤。 this.setState'是未定義的。 – user3458571
所以我可以證實這似乎是正確的方法,如果我手動設置狀態我得到正確的結果,所以謝謝你!現在我想我需要在Firebase身份驗證功能中進行某種綁定。我只是不知道如何.. – user3458571
你的'firebase'對象是怎麼進來的?您需要確保它已初始化以與您的Firebase帳戶配合使用。最好的方法是在應用程序的入口點初始化'firebase',然後將其作爲'prop'傳遞給需要它們的子組件。檢查你的「網絡」請求,確保它發送請求並返回一些東西!如果您認爲這對他人有幫助,請投票回答! –