使用AsyncStorage API无法存储登录的用户数据

时间:2018-08-20 13:36:52

标签: react-native react-native-android react-native-navigation asyncstorage

我是新来的本地人,所以请忍受我。

这是我的访问令牌的异步存储,令牌是API响应的参数之一。这个代码在登录屏幕上

async getToken() {

 try{
 const token = await AsyncStorage.getItem('ACCESS_TOKEN');
 if(token !== null) {
   this.props.navigation.navigate('Profile')
 }
 else{
   this.props.navigation.navigate('Login')
 }
 }
  catch (error){
  console.log('Something went wrong');
 }
 }

 async storeToken(accessToken) {

  try{
   await AsyncStorage.setItem('ACCESS_TOKEN', accessToken);
       this.getToken();
   }
    catch (error) {
     console.log('something went wrong');
   }

   }

登录时,它会将我导航到“个人资料”页面,但刷新应用程序后,它将返回到登录页面或导航树

这是设置导航的我的app.js

const TodoNav = StackNavigator({

 Login: { screen: Login },
 SignUp: { screen: SignUp },
 ForgotPassword: { screen: ForgotPassword },
 Profile: { screen: Profile },
 MenuScreen: { screen: MenuScreen },
  }, {
      mode: 'modal'
  })

 export default class App extends Component{

  render() {
   return (
     <TodoNav />
      );
    }
   }

1 个答案:

答案 0 :(得分:1)

AsyncStorage不负责保存应用程序的导航状态,它将在您传递给应用程序时存储数据。有关更多详细信息,请参阅AsyncStorage的文档。(Here)   为了显示主屏幕,您需要在 App.js 中检查异步存储数据 然后相应地创建导航堆栈,例如:

如果找到AccessToken

 const TodoNavAuthenticated = StackNavigator({

 Profile: { screen: Profile },
 MenuScreen: { screen: MenuScreen },
  }, {
      mode: 'modal'
  })

如果未找到Accesstoken,则表明您尚未登录:

const TodoNav = StackNavigator({

 Login: { screen: Login },
 SignUp: { screen: SignUp },
 ForgotPassword: { screen: ForgotPassword },
 Profile: { screen: Profile },
 MenuScreen: { screen: MenuScreen },
  }, {
      mode: 'modal'
  })

在使用<ToDoNav />时,即在App.js render()方法内部,需要对此进行检查。