我正在尝试将Firebase身份验证功能添加到我的React Native应用程序中。由于FirebaseAuth是异步加载的,因此必须使用onAuthStateChanged来侦听更改,如下所示:
async componentDidMount() {
if (!firebase.apps.length) { firebase.initializeApp(ApiKeys.FirebaseConfig); }
firebase.auth().onAuthStateChanged((user) => {
this.setState({
isAuthenticationReady: true, isAuthenticated: !!user
});
});
}
我的实现是否存在问题,导致内存使用增加,或者firebase-js-sdk存在问题?另外,代码是否有提供相同功能的替代方法?
(我正在使用Expo和Firebase JS SDK的5.5.0版本)
答案 0 :(得分:1)
我发现的唯一一件事是,在卸载组件后,您可能应该停止监听。您正在调用的方法返回一个函数,您可以调用该函数来取消订阅事件。像这样:
componentDidMount() {
this.onAuthStateChangedUnsubscribe =
firebase.auth().onAuthStateChanged((user) => {
this.setState({
isAuthenticationReady: true, isAuthenticated: !!user
});
});
}
componentWillUnmount() {
if (this.onAuthStateChangedUnsubscribe) this.onAuthStateChangedUnsubscribe();
}