异步存储会话不起作用,反应本机



我用asyncstorage登录和注销。但是它不起作用,当我打开应用程序时,它总是显示登录屏幕。请查看我的代码,

登录第一.tsx

let userID = response.data.details[0].id.toString();
let userName = response.data.details[0].username.toString();
let email = response.data.details[0].email.toString();
let accountType = response.data.details[0].account_type.toString();
let eventID = response.data.details[0].event_id;
eventID = (eventID === null) ? 0 : eventID.toString();
SetUserStorage.setUserDetails('userLoginStatus', 1);
SetUserStorage.setUserDetails('userId', userID);
SetUserStorage.setUserDetails('userName', userName);
SetUserStorage.setUserDetails('userEmail', email);
SetUserStorage.setUserDetails('userAccountType', accountType);
SetUserStorage.setUserDetails('userEventID', eventID);
this.props.navigation.navigate('Home');

//GetUserStorage.tsx

import { AsyncStorage } from 'react-native';
export const getUserDetails = async (sessionValue) => {
let userSession = '';
try {
userSession = await AsyncStorage.getItem(sessionValue) || 0;
} catch (error) {
// Error retrieving data
console.log(error.message);
}
return userSession;
}

//SetUserStorage.tsx

import { AsyncStorage } from 'react-native';
export const setUserDetails = async (sessionType, sessionValue) => {
try {
await AsyncStorage.setItem(sessionType, sessionValue);
} catch (error) {
// Error retrieving data
console.log(error.message);
}
}

//ClearUserStorage.tsx

import { AsyncStorage } from 'react-native';
export const clearAllStorage = async () => {
try {
await AsyncStorage.clear();
return 1;
} catch (error) {
// Error retrieving data
console.log(error.message);
return 0;
}
}

//Splash.tsx

export default class Splash extends Component {
async componentDidMount() {
let routeNames = 'LoginFirst';
const isLogin = await AsyncStorage.getItem('userLoginStatus');
setTimeout(() => {
this.setState({ isLoading: false });
const { navigate } = this.props.navigation;
if (isLogin !== null || isLogin === 'true') {
routeNames = 'Home';
} else {
routeNames = 'LoginFirst';
}
// navigate(routeNames);
const resetAction = StackActions.reset({
index: 0,
actions: [NavigationActions.navigate({ routeName: routeNames })]
});
this.props.navigation.dispatch(resetAction);
}, 2000);
}
render() {
return (
<View style={styles.container}>
<Image
style={styles.logo}
source={require('../../../assets/logo.png')}
/>
</View>
);
}
}

//Logout.tsx

logoutBtn = async () => {
let clear = await clearStorage.clearAllStorage();
if (clear) {
this.props.navigation.navigate('LoginFirst');
}
}

每次打开应用程序时,它都会显示登录屏幕。我使用了初始屏幕(Splash.tsx(来检查会话。

如何保留会话而不显示登录屏幕。在我的代码中还有什么要做的吗?

登录时,您尝试在userLoginStatus中存储1,但是,我们只能在AsyncStorage中存储字符串。

因此,每次从AsyncStorage获取userLoginStatus时,它都会返回null,这就是您始终登陆登录屏幕的原因。

最新更新