首页 > 解决方案 > 用户注销时停止 Appstate 事件触发器

问题描述

我有此代码使用 AppState 向用户显示模式,一旦应用程序进入后台并返回活动状态,则需要指纹扫描才能解锁应用程序在 HomeScreen 的使用效果中

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

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

方法

  handleAppStateChange (nextAppState){
    if (nextAppState === 'active') {
     
     this.props.navigation.navigate('AuthModal');
     
    }

这一切都很好。在我注销的单独屏幕上,当我注销并导航到登录屏幕时,appState 事件仍然被触发,我不希望这样。该事件应仅限于 AuthStack。我已经尝试了几件事,但没有运气,我该如何处理?

标签: reactjsreact-native

解决方案


您可以使用Async Storage来处理该问题,而无需删除侦听器。
如果您在注销后删除侦听器,则必须在登录后再次侦听并在应用程序启动时再次侦听。

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

//in logout function
const logout = async() => {
   await AsyncStorage.setItem('authState', "logout");
   ...
}
//in login function
const login = async() => {
   await AsyncStorage.setItem('authState', "login");
   ...
}

然后this.props.navigation.navigate('AuthModal')用 if 语句包装以检查身份验证

handleAppStateChange (nextAppState){
    if (nextAppState === 'active') {
     
     (async() => {
        const authState = await AsyncStorage.getItem('authState');
        if(authState === "login"){
            this.props.navigation.navigate('AuthModal');
        }
     })();
     
    }
}

推荐阅读