【发布时间】:2019-08-14 20:12:16
【问题描述】:
我使用asyncstorage 进行登录和注销。但它不起作用,当我打开应用程序时,它总是显示登录屏幕。请查看我的代码,
//LoginFirst.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);
}
}
//清除用户存储.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>
);
}
}
//注销.tsx
logoutBtn = async () => {
let clear = await clearStorage.clearAllStorage();
if (clear) {
this.props.navigation.navigate('LoginFirst');
}
}
每次打开应用程序时,它都会显示登录屏幕。我使用了启动画面 (Splash.tsx) 来检查会话。
如何保持会话而不显示登录屏幕。我的代码中还有其他事情要做吗?
【问题讨论】:
-
isLogin在您的setTimeout中的值是多少? -
@MikeM
isLogin值为1
标签: reactjs react-native