【发布时间】:2018-01-15 18:37:46
【问题描述】:
我有一个 react native 应用程序,它根据是否有经过身份验证的 firebase 用户显示不同的导航器。
这是我的主要 App 类:
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>
);
}
}
现在,当用户登录时重新呈现正确的导航器时,这可以很好地工作。
我遇到的问题是注销。在我的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 反应导航
标签: reactjs firebase react-native firebase-authentication react-navigation