認証されたfirebaseユーザがいるかどうかに基づいて異なるナビゲータを表示する、反応するネイティブアプリケーションがあります。 。React Nativeでログアウトを正しく処理する
export default class App extends Component {
state = { loggedIn: null }
componentWillMount() {
firebase.initializeApp({...});
firebase.auth().onAuthStateChanged(user => {
if (user) {
this.setState({ loggedIn: true });
} else {
this.setState({ loggedIn: false });
}
});
}
renderContent() {
switch (this.state.loggedIn) {
case true:
return (
<MenuContext>
<MainNavigator />
</MenuContext>
);
case false:
return (
<AuthNavigator />
);
default:
return (
<View style={styles.spinnerStyle}>
<Spinner size="large" />
</View>
);
}
}
render() {
return (
<Provider store={store}>
{this.renderContent()}
</Provider>
);
}
}
は今、これは私が持っている問題は、ログアウトして
ユーザがログインしたときに正しいNavigatorを再レンダリングすると完全に正常に動作します:
はここに私のメインのアプリケーションクラスです。 MainNavigator
(ユーザーがログインしているときに表示されるもの)には、ユーザーをログアウトするログアウトボタンがあります。このように実装:
警告:専用でマウントや実装部品を更新することができます
signOutUser = async() => { try { await firebase.auth().signOut(); } catch (e) { console.log(e); } } render() { return ( ... <Button title="logout" onPress={() => this.signOutUser()} /> ) }
これが期待されているものを行い、しかし、私は私が解決したい、次の警告が表示されます。これは通常、マウントされていないコンポーネントに対してsetState、replaceState、またはforceUpdateが呼び出されたことを意味します。これはノーオペレーションです。
このログアウト機能を実装するベストプラクティス方法は何ですか。
編集:私はアプリケーションのナビゲーションを管理するためにreact-navigation
ライブラリを使用しています。
ログインにリダイレクト? –
@GabrielDiez react-navigation –