Reactjs 用户注销时停止Appstate事件触发器

Reactjs 用户注销时停止Appstate事件触发器,reactjs,react-native,Reactjs,React Native,我有这段代码,使用AppState向用户显示一个模式,当应用程序进入后台并返回活动状态时,需要指纹扫描来解锁应用程序 主屏幕的使用效果 AppState.addEventListener('change', this.handleAppStateChange); return () => { AppState.removeEventListener('change', this.handleAppStateChange); }; 方法 handle

我有这段代码,使用AppState向用户显示一个模式,当应用程序进入后台并返回活动状态时,需要指纹扫描来解锁应用程序 主屏幕的使用效果

  AppState.addEventListener('change', this.handleAppStateChange);

    return () => {
      AppState.removeEventListener('change', this.handleAppStateChange);
    };

方法

  handleAppStateChange (nextAppState){
    if (nextAppState === 'active') {
     
     this.props.navigation.navigate('AuthModal');
     
    }
这一切都很好。在我注销的另一个屏幕上,当我注销并导航到登录屏幕时,appState事件仍然会被触发,我不希望这样。事件应仅限于AuthStack。我试过几次,但运气不好,我该怎么处理呢?

你可以在没有运气的情况下处理它。
如果您在注销后删除侦听器,则必须在登录后以及应用程序启动后再次侦听

不删除侦听器的异步存储解决方案
您的代码可能如下所示:

//在注销函数中
const logout=async()=>{
等待AsyncStorage.setItem('authState','logout');
...
}
//在登录函数中
const login=async()=>{
等待AsyncStorage.setItem('authState','login');
...
}
然后将
this.props.navigation.navigate('AuthModal')
包装为if statment以检查身份验证

handlappstatechange(nextapstate){
如果(nextAppState===“活动”){
(异步()=>{
const authState=await AsyncStorage.getItem('authState');
如果(authState==“登录”){
this.props.navigation.navigate('authmodel');
}
})();
}
}