首次安装时,app运行没有任何问题。
但是当应用最小化然后重新打开时,unsubscribe() is not a function
错误会显示并停留在初始屏幕上。这只发生在最小化>从全新安装和首次运行中恢复。
这意味着如果我从后台杀了应用程序并打开然后最小化然后恢复,它完全正常。
这是我在firebase文档中使用的checkLoginState
函数。我不确定这与react-native
或firebase
或react-native-firebase
或react-navigation
有关。知道如何调试和解决这个问题吗?
Handle the sign-in flow manually
function checkLoginState(event) {
if (event.authResponse) {
// User is signed-in Facebook.
var unsubscribe = firebase.auth().onAuthStateChanged(function(firebaseUser) {
unsubscribe();
// Check if we are already signed-in Firebase with the correct user.
if (!isUserEqual(event.authResponse, firebaseUser)) {
// Sign in user.
} else {
// User is already signed-in Firebase with the correct user.
}
});
} else {
// User is signed-out of Facebook.
firebase.auth().signOut();
}
}
已更新
在全新安装中>第一次运行>最小化>恢复`,应用程序似乎堆栈或什么。如果我使用react-native reload重新加载app我在日志中得到了这个。 componentDidmount和unmount多次运行。每个最小化>恢复堆栈1.如果我杀了app并重新打开,这个问题就消失了。请注意,这在物理和虚拟设备中都会发生。
更新1
这主要与天生的反应有关。 https://github.com/facebook/react-native/issues/12562
答案 0 :(得分:-1)
我也遇到了这个问题并且正在打破这个问题...根据调用监听器作为函数的文档必须取消订阅监听器,但事实并非如此。所以这就是我所做的,也希望能帮到你..
class Home extends Component {
constructor(props) {
super(props);
this.Homelistener = null;
this.state = {
// ...
};
this.Homelistener = firebase.auth().onAuthStateChanged(user => {
if (user) {
//do whatever you want here
// you can unsubscribe from the listener here or do it in
//componentwillunmount()
this.Homelistener = null; // --> just set it to null
} else {
//do something
SplashScreen.hide();
}
});