reactjs - 用户注销时停止 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。我已经尝试了几件事,但没有运气,我该如何处理?
解决方案
您可以使用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');
}
})();
}
}
推荐阅读
- python - 用 mpf.plot mplfinance 打印两个点
- django - 如何允许 http django heroku
- c# - 如何使用 c# 获取或设置自定义 appsetting.json
- javascript - 在 pdf-lib 中设置 Pdf 图像注释的链接
- r - R Shiny:从动态创建的存储桶列表中打印输出
- java - 从 XSD 生成类删除命名空间引用
- ios - 将数据从 ViewContoller 快速传递到 popOver ViewController
- php - PHP Laravel - 控制器不存在
- python - 长初始化方法的 Python 最佳实践
- reactjs - React 组件显示与给定不同的道具